2013-03-19 275 views
-3

我無法從標準輸入不斷讀取,直到按下CTRL + D。我必須使用unistd.h中的read()。我試圖模擬貓的功能。有沒有辦法讓我的緩衝區(我打印%s)看起來整潔沒有不必要的空間從read(STDIN_FILENO, buf, 256)從標準輸入讀取,直到EOF

+3

沒有看到你很難知道有什麼建議的代碼。 – suspectus 2013-03-19 22:20:40

+0

我不確定你的問題到底是什麼,因爲你沒有發佈代碼,沒有錯誤信息,也沒有輸出(預期的或實際的),但是這是一個黑暗中的鏡頭:讀取函數不會null終止你,所以你應該這樣做:'int rd = read(STDIN_FILENO,buf,255); buf [rd] = 0x0;',假設buf被聲明爲'char buf [256]' – FrankieTheKneeMan 2013-03-19 22:39:53

回答

2

我想模擬貓的功能。

這裏是一個開始:

ssize_t nread, nwrite; 

while ((nread = read(STDIN_FILENO, buf, sizeof buf)) > 0) { 
    nwrite = write(STDOUT_FILENO, buf, nread); 
    /* Error handling and partial writes left as exercise. */ 
} 
+0

謝謝我已經有了這段代碼,問題是sizeof(buf)..並且發現我的代碼中有一個小錯誤我閱讀後使用prinf作爲buf ...... – Alex 2013-03-19 22:25:01

+1

@Alex sizeof'有什麼問題? – cnicutar 2013-03-19 22:25:49

+0

對不起,這是遲到,我沒有注意到,我有一個printf()之前我的代碼讀/寫stdin/out,並導致一些混亂; D ..反正會發布一些代碼後,我完成.. – Alex 2013-03-19 22:39:48