我正在编写的这个软件应该打开一个文件,该文件必须作为参数传递,并使用open和write系统调用将文件的内容写入标准输出。(这有点像cat
命令)
问题是,一旦我将程序作为运行
./a.out /example/pattern/file
它在标准输出上写入文件的模式,然后它被卡住了,没有写入任何内容或终止,甚至允许我在终端上写入。
我试过使用ddd调试器,但没能找到问题。
包括所有必要的标题。
int main(int argc,char * argv[]){
printf("%sn", argv[1]);
int fd, lung;
char buf[10];
if(fd = open(argv[1], O_RDONLY)==-1){
perror("argv[1], in apertura");
exit(EXIT_FAILURE);
}
while(lung = read(fd,buf,10)>0){
if( (write(1, buf, lung))==-1) perror("error");
}
if (lung==-1) {perror("error");exit(EXIT_FAILURE);}
fflush(NULL);
close(fd);
return 0;
}
这不是很可疑吗?
if(fd = open(argv[1], O_RDONLY)==-1) {
根据操作员优先级,==
将在=
之前执行。
然后:
while(lung = read(fd,buf,10)>0){
将类似地遭受在CCD_ 5之前执行的CCD_。
提示:如果有疑问,请使用括号!;)
while(lung = read(fd,buf,10)>0){
if( (write(1, buf, lung))==-1) perror("error");
}
与相同(由于操作员优先)
while(lung = (read(fd,buf,10)>0) ){
if( (write(1, buf, lung))==-1) perror("error");
}
lung
的值将是1
或0
。当为0
时,循环将中断当为1
时,只有1
字符将写入stdout
。
您需要的是:
while( (lung = read(fd,buf,10)) > 0 ){