首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于使用循环读写文件有关问题,不懂,求大神解答。

2013-11-18 
关于使用循环读写文件问题,不懂,求大神解答。。。#include sys/types.h#include unistd.h#include fcntl

关于使用循环读写文件问题,不懂,求大神解答。。。
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>

int rfd, wfd;
char c;

int main(int argc, char*argv[])
{
if(argc!=3)
{
printf("Usage %s sourcesfiel destfile. \n",argv[0]);
return 1;
}
if((rfd=open(argv[1], O_RDONLY))==-1)
{
printf("openf file %s failed.\n",argv[1]);
return 2;
}
if((wfd=creat(argv[2],0666))==-1)
{
printf("create file %s failed.\n",argv[2]);
return 3;
}
fork();
for(;;)
{
if(read(rfd,&c,1)!=1)
return 1;
write(wfd,&c,1);
}

return 0;
}

问题:
标注为红色的代码中:
if(read(rfd,&c,1)!=1)
return 1;
write(wfd,&c,1);
一旦 if(read(rfd,&c,1)!=1) return 1; 那么就不可能去写:write(wfd,&c,1);(因为前面都已经return 1了)。这样还能循环从前一个文件读取字符,然后写入到下一个文件里面吗?  这个代码是不是有问题? 
[解决办法]
代码是应该有问题的!
而且中间的fork函数你没有处理父子进程呢!
[解决办法]

引用:
问题:
标注为红色的代码中:
if(read(rfd,&c,1)!=1)
return 1;
write(wfd,&c,1);
一旦 if(read(rfd,&c,1)!=1) return 1; 那么就不可能去写:write(wfd,&c,1);(因为前面都已经return 1了)。这样还能循环从前一个文件读取字符,然后写入到下一个文件里面吗?  这个代码是不是有问题? 


没有任何问题。
read(rfd,&c,1)==1 表示读到数据。可以写文件。
read(rfd,&c,1)!=1 表示没有读到数据,所以不用写。

而且,一旦read(rfd,&c,1)!=1 
就是文件读出错了,或者读到文件结束了。

所以写文件也可以结束了。

热点排行