程序不写在标准输出上而是卡住了

Program doesn't write on the standard output and gets stuck instead

我正在编写的软件应该打开一个文件,该文件必须作为参数传递,并使用打开和写入系统调用将文件内容写入标准输出。 (有点像cat命令)

问题是一旦我 运行 程序作为

./a.out /example/pattern/file

它在标准输出上写入文件的模式,然后卡住,没有写入任何内容或终止,甚至允许我在终端上写入。

我试过使用 ddd 调试器,但没能找到问题所在。

所有必要的 headers 都包括在内。

int main(int argc,char * argv[]){

    printf("%s\n", 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) {

根据operator precedence==会在=之前执行。

然后:

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

将同样受到 >= 之前执行的影响。

提示:如有疑问,请使用括号! ;)

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 ){