現在、私はexeclpされた子プログラムからの入力行を読んでいます。基本的に、子プログラムが正しく実行されない場合、読み込み時にパイピング情報であってはならず、エラーがスローされます。パイプをポーリングした後でもfgetcがまだブロックされています
ファイルディスクリプタをポーリングしようとしましたが、プログラムが正常に実行されたとしても返されました。だから、基本的に私は過去の投票を取得し、fgetcはハングしている/読んで何もないのでブロックして、fgetcも-1を返していません。
読書とポーリング:
char* read_line(int fd) {
// fd is a pipe's read end. I know it reads properly.
FILE *file = fdopen(fd, "r");
int ret;
struct pollfd fdinfo[1];
fdinfo[0].fd = fd;
fdinfo[0].events = POLLIN;
ret = poll(fdinfo,1, 1000);
if (ret < 0) {
return "NOPE";
}
char* result = malloc(sizeof(char) * 80);
memset(result, 0, sizeof(int));
int position = 0;
int next = 0;
while (1) {
next = fgetc(file); //STALLING HERE
if (next == '!') {
free(result);
return "!";
}
if (next == EOF || next == '\n') {
result[position] = '\0';
return result;
} else {
result[position++] = (char)next;
}
}
}
fdinfo [0] .fd = 2; 'fdinfo [0] .fd = fd;'にする必要がありますか? –
これは変更しても、同じ問題が発生しているはずです。それを指摘してくれてありがとう:) – lighthou