繁体   English   中英

C Unix程序无法从文件读取

[英]C Unix program won't read from file

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

}

问题出在你的if条件: fd=open("myfile1",O_RDONLY)<0 小于比较具有比分配更高的优先级。 它应该是(fd=open("myfile1",O_RDONLY))<0

正如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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM