[英]Does fprintf() work for writing in a pipe, or I must always use write()?
[英]Why fprintf and fscanf does not work with pipe
我編寫了創建管道的程序,將數字寫入管道,從管道讀取並將其打印到stdout。 但似乎fscanf看到空管流,雖然我做了fflush。
為什么fprintf不打印任何東西?
int main() {
int fd[2];
pipe(fd);
FILE* write_file = fdopen(fd[1], "w");
FILE* read_file = fdopen(fd[0], "r");
int x = 0;
fprintf(write_file, "%d", 100);
fflush(write_file);
fscanf(read_file, "%d", &x);
printf("%d\n", x);
}
你必須關閉管道的寫入端,而不是沖洗它。 否則fscanf()
不知道,如果還有數據需要讀取(更多數字):
fprintf(write_file, "%d", 100);
fclose(write_file);
fscanf(read_file, "%d", &x);
或者,在數字后面寫一個空白以使fscanf()
停止尋找更多數字:
fprintf(write_file, "%d ", 100);
fflush(write_file);
fscanf(read_file, "%d", &x);
這應該都可以解決您的問題。
fscanf(read_file,"%d")
從流中讀取,只要它檢索到與模式"%d"
匹配的內容,即只要沒有讀取空格,非數字等字符, fscanf
“等待”直到下一個角色進來了。
因此, fprintf(write_file, "%d\\n", 100);
將解決問題,因為它“終止”寫入管道的數字,這樣后續的fscanf
也將被終止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.