私はこれを行うことができるようにしたい:
$ echo "hello world" | ./my-c-program
piped input: >>hello world<<
stdin が tty かどうかを検出するためisatty
に使用する必要があることはわかっています。tty でない場合は、パイプされた内容を読み上げたいと思います — 上記の例では、それは stringhello world
です。
Cでこれを行うための推奨される方法は何ですか?
これが私がこれまでに得たものです:
#include <stdio.h>
#include <unistd.h>
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);
}
}
私はこれを使用してコンパイルしました:
gcc -o my-c-program my-c-program.c
パイプされたコンテンツ文字列の最後に U+FFFD REPLACEMENT CHARACTER と改行を常に追加しているように見えることを除いて、ほとんど機能します。なぜこのようなことが起こるのでしょうか? また、この問題を回避するにはどうすればよいでしょうか?
echo "hello world" | ./my-c-program
piped content: >>hello world
�<<
免責事項:私は C の経験がまったくありません。お手柔らかにお願いします。