我想通过管道将数据发送到简单的c程序:
#include <stdio.h>
int main(int argc, char const *argv[])
{
char message[100000];
scanf("%s", message);
printf("%s", message);
return 0;
}
例如,我想将/ etc / passwd中的所有数据打印到终端。为此,我输入:
cat /etc/passwd | ./my_c_program
但是它不起作用,它只显示“ ##”。
答案 0 :(得分:1)
最简单的方法之一就是使用 getline()
。 man
页描述了以下功能:
ssize_t getline(char **lineptr, size_t *n, FILE *stream);
getline()
从流中读取整行,并将包含文本的缓冲区的地址存储到*lineptr
中。缓冲区以null终止,并且如果找到了换行符,则包含换行符。
顺便说一句,记住这一段:
如果在通话前将
*lineptr
设置为NULL ,并且将*n
设置为0 ,则getline()
将分配缓冲区来存储行。 即使getline()失败,用户程序也应释放该缓冲区。
在一个工作样本下面。
#include <stdio.h>
int main(int argc, char* argv)
{
char* l = NULL;
size_t n;
while (getline(&l,&n, stdin) != -1 )
{
printf("%s",l);
}
free(l); // don't forget to release the allocated memory
// mmh, yes, here it's not useful since the program
// ends.
}
此答案受此SO reply的启发。