我有一个基本程序,它打开一个包含在与C文件相同的目录中的文件(在root中)。该文件名为myfile1
,这是一个包含文本的简单文件。
该程序应该打开文件,计算字符数并显示它。出于某种原因,我编译程序,用a.out
运行它,程序从用户获得输入并在按下 Ctrl + D 时完成,当它应该从文件。
有关可能发生的事情的任何想法?非常感谢,这是我到目前为止:
#include <fcntl.h>
void main(){
char buff[512];
int fd = 0;
int j=0;
long total=0;
if(fd=open("myfile1",O_RDONLY)<0){
printf("Error");
return 1;
}
while((j=read(fd,buff,512))>0)
total = total+j;
printf("%d\n",total);
close(fd);
return 0;
}
答案 0 :(得分:6)
问题在于您的if
条件:fd=open("myfile1",O_RDONLY)<0
。低于比较的优先级高于赋值。它应该是(fd=open("myfile1",O_RDONLY))<0
。
答案 1 :(得分:1)
在你的代码中,正如ketlat所说,if
逻辑是有问题的。
如果您在代码中放入调试打印并检查fd
,则会看到
代码:
if(fd=open("myfile1",O_RDONLY)<0){
printf("Error");
return 1;
}
printf("obtained fd = %d\n", fd);
O / P:
获得fd = 0
<强>原因强>
<
优先于=
。因此,当open()
成功时,它将返回非负值,该值不小于0,并且比较open("myfile1",O_RDONLY)<0
将评估为 false ,表示为0,同样将分配给fd
。
Nw,此fd
值将用于read()
来电。 FD 0表示stdin
或标准输入。因此,根据您的逻辑,代码行为正确。
但是,要实现目标,您需要更改
fd=open("myfile1",O_RDONLY)<0
到
(fd=open("myfile1",O_RDONLY))<0
使用更改的代码,样本运行可能会产生类似
的o / p获得fd = 3.
收到通知,YMMV。