open時にfd 0がclose済みという話ではないでしょうか?
以下のプログラムを動かすと(もちろん別shellでcat /tmp/pipe
としてopenの先へ進むようにし)
最後のfdの値は期待通り3となりました。
c
1#include <stdio.h>
2#include <sys/stat.h>
3#include <sys/fcntl.h>
4
5int main() {
6 int fd;
7 const char* pipepath = "/tmp/pipe";
8 mkfifo(pipepath, 0666);
9 fd = open(pipepath, O_WRONLY);
10
11 fprintf(stderr, "fd = %d\n", fd);
12 return 0;
13}
Ubuntu 16.04 LTSです
追記:解決されたようですが回答が尻切れなので補足します。
上記はopenの結果が0になることについてのものです。エラーが発生した原因に言及してませんが、close(0)をやっているらしいことから例えばパイプ接続した子供プロセスの生成のようなことをしているのではないかと推測しました。そういうことをする場合標準入出力を一旦closeしてpipeとしてopenしなおすといったことをすると思うので、その処理の前後でclose済みのファイルディスクリプターへ誤ってI/Oしてしまったといった話ではないかと思いました。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/01 10:27