2011-03-25 20 views
2

有沒有一個選項,read()的一部分,當在文件描述符上調用read()時,它只打印出空字符到空終止符?使用read()讀取一個空終止符()

+0

也許你正在考慮fgets(),但它適用於FILE *而不是文件描述符。 – 2011-03-25 17:54:59

回答

7

對不起,沒有。 read()根本不查看數據;它只讀取儘可能多的字節(但不超過緩衝區大小)。

我將與更高級別的做到這一點stdio.h功能,通過調用getc()(和寫入緩衝區),直到我看到了一個N​​ULL字節,然後在NUL ungetc()

3

如果你的意思讀取到空終止的代替打印,則不:它只是除非在手冊頁列出的故障情況之一發生時,讀取您指定的字節數,或達到最終的文件。 (文本文件中沒有NUL終止符,但我想你知道這一點。)

3

如果不使用緩衝stdio或您自己的緩衝系統,讀取特定分隔符或除固定字節數之外的任何其他條件的唯一方法是逐字節讀取。如果在strace下運行shell腳本,您會注意到shell命令read以這種方式工作,因爲它必須將後續輸入保留爲未讀,以便可以由繼承fd的其他進程讀取。

0

有一種情況,其中read()將爲您執行行處理,這是在終端上打開文件描述符(pty/tty)的時候。你可以通過操作termio結構來設置你的行分隔符。我不知道你是否可以將NUL設置爲你的行尾字符。