![](/img/trans.png)
[英]Redirecting output of a C program as input of another program in Linux command shell
[英]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
调用getline
中lineptr
和size
都没有改变,以使其正常工作(尽管您可以更改lineptr
指向的字符串)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.