【发布时间】:2014-11-23 21:51:08
【问题描述】:
我正在尝试打印文件的内容,但是程序将在 read() 函数处暂停,并且在我按下回车键之前不会继续。按下回车键后,终端不会打印任何内容。程序的其余部分未显示,但这是导致问题的方法。
{
char buff[1024];
ssize_t bytesRead = 0;
int readFile, error;
if((readFile = open(file,O_RDONLY)<0))
{
printf("can't open %s\n",file);
error = errno;
return -1;
}
do{
memset(buff,0,1024);
if((bytesRead=read(readFile,buff,1024))==-1)
{
printf("error reading file");
error = errno;
printf("%d",error);
}
else
printf("%s",buff);
}while(bytesRead==1024);
printf("\n");
close(readFile);
return 1;
}
或者,如果我将 read() 函数更改为 pread(file,buff,1024,0) 会引发非法 seek 29 错误。
【问题讨论】:
-
您能否在您的
printf("error reading file");末尾添加一个\n?没有它,消息可能无法从printf行缓冲区中取出,因此您不会看到它出现,这让您想知道发生了什么。 -
我试过了,但还是没有骰子,谢谢。
-
天哪。
if((readFile = open(file,O_RDONLY)<0))。这会将readFile设置为0或仅1(更可能是0- 标准输入)。 编辑: 在))之间右击<0。查找错误是因为您无法查找标准输出或标准输入。 -
你先生太棒了!
-
从现在开始,把你的赋值语句放在与
ifs 不同的行上。我不明白为什么人们试图把这么多东西塞进一行。它更难阅读,并且会导致许多类似错字的错误,例如问题中的错误。教人们使用这种语法的人不应该教。