c语言 - 程序不写入标准输出,而是卡住



我正在编写的这个软件应该打开一个文件,该文件必须作为参数传递,并使用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的值将是10。当为0时,循环将中断当为1时,只有1字符将写入stdout

您需要的是:

while( (lung = read(fd,buf,10)) > 0 ){

最新更新