C Unix程序无法从文件中读取

时间:2014-11-05 06:06:11

标签: c unix

我有一个基本程序,它打开一个包含在与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;

}

2 个答案:

答案 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。