如何在C语言中读取管道内容?
如何在C语言中读取管道内容?
我想要实现以下功能:\n
$ echo "hello world" | ./my-c-program piped input: >>hello world<<
\n我知道应该使用isatty
来判断stdin是否为tty。如果不是tty,我想要读取管道内容——在上面的例子中,就是字符串hello world
。\n在C语言中,有什么推荐的方法吗?\n这是我目前的代码:\n
#include#include int main(int argc, char* argv[]) { if (!isatty(fileno(stdin))) { int i = 0; char pipe[65536]; while(-1 != (pipe[i++] = getchar())); fprintf(stdout, "piped content: >>%s<<\n", pipe); } }
\n我使用以下命令编译它:\n
gcc -o my-c-program my-c-program.c
\n它几乎可以工作,只是似乎总是在管道内容字符串的末尾添加了一个U+FFFD替换字符和一个换行符(虽然我理解换行符)。为什么会发生这种情况,如何避免这个问题?\n
echo "hello world" | ./my-c-program piped content: >>hello world �<<
\n免责声明:我对C语言完全没有经验。请对我宽容一些。