2016-11-07 249 views
1

我正在寫兩個c文件,一個是寫入(通過標準輸出),另一個是讀取(通過標準輸入)。寫入標準輸出並從標準輸入讀取C

但讀取的代碼總是掛着read(),我試過了fread函數但是沒用。

有人可以提供建議嗎?

寫例如:

int main() { 
    char *a_string="Hello"; 
    write(fileno(stdout), a_string, strlen(a_string)+1); 

    return 0; 
} 

讀例如:

int main() { 
    char buffer[100]; 
    read(fileno(stdin), buffer, 100-1); 
    printf("buffer=%s\n", buffer); 

    return 0; 
} 
+0

看看[fgets](https://www.tutorialspoint.com/c_standard_library/c_function_fgets.htm) – LPs

+0

通常你的代碼會掛起,直到你按下Enter鍵。此外你的字符串不會被零終止。使用'fgets'來閱讀,'fputs'來寫作。 –

+0

由於某種原因,我只想使用read()和write()。 –

回答

0

閱讀代碼總是與read()掛起,我試過fread函數但沒用。

這是因爲readfread,不像fgets和類似的功能,當用戶輸入一個換行符不要放棄讀書(按輸入)。它一直等到讀取EOF或讀取指定的字節。

要發送EOF到read您必須按Ctrl + D

0

您需要輸入EOF停止,在Linux中,它是按Ctrl + d。

+0

在linux中,stdin和stdout是未命名的管道。當關閉管道的所有寫入描述符時,它將EOF發送到該管道的讀取描述符。 – nopasara

+0

@nopasara我不明白這是如何特別相關。 –

+0

@MD XF可能不是,我雖然他一起編了兩個節目。第一個編寫程序的例子是什麼? – nopasara