簡體   English   中英

為什么fprintf和fscanf不適用於管道

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM