关于EOF和系统调用lseek,read,write简单c程序
以下有两个程序,作用是测文件字节数。
在红帽9.0下测试,第一个程序没问题,第二个程序,死循环。
问题是两个程序都是用的EOF作为判定文件结束的标志,为什么第一个程序能读到EOF就停止了,而第二个程序确似乎读不到,陷入死循环。
新手分数不多,但请大家不吝赐教,谢谢!!
[code=C/C++][/code]
#include <stdio.h>
int main(int argc,char *argv[])
{
int i=0;
FILE *fp;
char ch;
fp=fopen(argv[1],"r");
while((ch=fgetc(fp))!=EOF)
i++;
printf("%dBytes\n",i);
return 0;
}
#include <stdio.h>
#include <fcntl.h>
int main(int argc,char *argv[])
{
int fd,i;
char buf[1];
char ch;
if(argc!=2)
{
printf("arguments error\n");
exit(1);
}
if((fd=open(argv[1],O_RDONLY))==-1)
{
printf("open error,or file is not exist\n");
exit(2);
}
for(i=0;ch!=EOF;i++)
{
lseek(fd,i,SEEK_SET);
read(fd,buf,1);
ch=buf[0];
}
close(fd);
printf("%d\n",i);
return 0;
}
[解决办法]
read(fd,buf,1);
考虑下遇到EOF会把EOF读入buf吗?
[解决办法]
EOF应该是read(fd,buf,1);的返回值
[解决办法]
for(i=0;ch!=EOF;i++)
{
lseek(fd,i,SEEK_SET);
read(fd,buf,1);
ch=buf[0];
}
是不是每次自增的是int型的i;而你用char行的ch接受所以接受不到EOF啊
[解决办法]