繁体   English   中英

将Shell命令输出重定向到C程序

[英]redirecting shell command output to C program

我有以下程序:

/* a.c */ 
#include <stdio.h>

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

size_t size=0;    
char* lineptr;      

    while(getline(&lineptr, &size, stdin)){           
        fprintf(stderr, "line = %s\n", lineptr);      
        if(lineptr){      
            free(lineptr);     
            lineptr = NULL;     
        }      
    }      

return 0;      
}      

我使用以下命令将shell命令“ ls”的输出重定向到该程序
以下行:

ls | ./a.out

预期产量:
程序应打印当前目录中所有文件的名称
然后终止

实际输出:
该程序会打印所有文件的名称,但不会终止,
而是无限循环并无限打印最后一个条目。

谢谢

GNU的getline函数在文件结束(或错误)时返回-1 采用

while(-1 != getline(&lineptr, &size, stdin))

...并在第一次调用getline之前将lineptr设置为NULL

同样,您不必在循环的每次迭代中都free指针。 您可以重用之前的指针,最后free一次:

size_t size = 0;
char* lineptr = NULL;

while(-1 != getline(&lineptr, &size, stdin)){
  fprintf(stderr, "line = %s", lineptr);
}

free(lineptr);

getline将根据需要在内部使用realloc 请注意,必须确保在lineptr调用getlinelineptrsize都没有改变,以使其正常工作(尽管您可以更改lineptr指向的字符串)。

暂无
暂无

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

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