主题 : linux下的C语言问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 38668
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
综合积分: 10 分
注册时间: 2011-02-28
最后登录: 2011-03-26
楼主  发表于: 2011-03-18 13:37

 linux下的C语言问题

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>
#define BUFFER_SIZE 1024
int main(int argc,char **argv) //这里是通过什么传进来的??argc、 **argv是什么??
{
int from_fd,to_fd;
int bytes_read,bytes_write;
char buffer[BUFFER_SIZE];
char *ptr;
if(argc!=3)//为什么要不等于3呢??
{
fprintf(stderr,"Usage:%s fromfile tofile/n/a",argv[0]); //stderr为什么不用加在双赢号里面了??
exit(1);
}
/* 打开源文件 */
if((from_fd=open(argv[1],O_RDONLY))==-1)
{
fprintf(stderr,"Open %s Error:%s/n",argv[1],strerror(errno));
exit(1);
}
/* 创建目的文件 */
if((to_fd=open(argv[2],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))==-1)
{
fprintf(stderr,"Open %s Error:%s/n",argv[2],strerror(errno));
exit(1);
}
/* 以下代码是一个经典的拷贝文件的代码 */
while(bytes_read=read(from_fd,buffer,BUFFER_SIZE))
{
/* 一个致命的错误发生了 */
if((bytes_read==-1)&&(errno!=EINTR)) break;//这句是什么意思??errno!=EIENTR是什么??
else if(bytes_read>0)
{
ptr=buffer;
while(bytes_write=write(to_fd,ptr,bytes_read))
{
/* 一个致命错误发生了 */
if((bytes_write==-1)&&(errno!=EINTR))break;
/* 写完了所有读的字节 */
else if(bytes_write==bytes_read) break;
/* 只写了一部分,继续写 */
else if(bytes_write>0)
{
ptr+=bytes_write;
bytes_read-=bytes_write;
}
}
/* 写的时候发生的致命错误 */
if(bytes_write==-1)break;
}
}
close(from_fd);
close(to_fd);
exit(0);
}
级别: 新手上路
UID: 38056
精华: 0
发帖: 16
金钱: 80 两
威望: 16 点
综合积分: 32 分
注册时间: 2011-02-21
最后登录: 2018-02-08
1楼  发表于: 2011-03-18 15:31
基本知识。
argc 和argv是系统自动帮你分析带进去的。比如cp sourcefile desfile,命令名+2个参数,总共就3个参数。

这些知识太基础,如果你不懂,还是先看c语言基础吧。
级别: 新手上路
UID: 38668
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
综合积分: 10 分
注册时间: 2011-02-28
最后登录: 2011-03-26
2楼  发表于: 2011-03-19 17:45

 回 1楼(newer2k) 的帖子

这个不用编译能看的出来??
级别: 新手上路
UID: 38056
精华: 0
发帖: 16
金钱: 80 两
威望: 16 点
综合积分: 32 分
注册时间: 2011-02-21
最后登录: 2018-02-08
3楼  发表于: 2011-03-20 10:12
要把自己当成编译器。
级别: 新手上路
UID: 38668
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
综合积分: 10 分
注册时间: 2011-02-28
最后登录: 2011-03-26
4楼  发表于: 2011-03-26 19:55

 回 3楼(newer2k) 的帖子

我就是来求解的…………
级别: 新手上路
UID: 38888
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
综合积分: 18 分
注册时间: 2011-03-02
最后登录: 2013-11-10
5楼  发表于: 2011-03-28 17:42
你先学C吧
级别: 新手上路
UID: 41315
精华: 0
发帖: 1
金钱: 5 两
威望: 1 点
综合积分: 2 分
注册时间: 2011-03-28
最后登录: 2011-03-30
6楼  发表于: 2011-03-30 22:07

 回 楼主(nt06) 的帖子

argc 参数的个数
argv 参数的字符串形式的数组
stderr -- 标准错误输出设备
级别: 新手上路
UID: 37701
精华: 0
发帖: 8
金钱: 40 两
威望: 8 点
综合积分: 16 分
注册时间: 2011-02-15
最后登录: 2014-05-02
7楼  发表于: 2011-04-01 15:12
级别: 侠客
UID: 32253
精华: 0
发帖: 87
金钱: 440 两
威望: 88 点
综合积分: 174 分
注册时间: 2010-11-12
最后登录: 2013-06-05
8楼  发表于: 2011-05-03 17:55
你可以先把每个函数的具体含义弄明白先