2012-11-11 33 views
1

對於作業,我必須從標準輸入中讀取,將其保存到一個文件,然後在另一個進程中讀取該文件。不過,我很困惑,爲什麼這個代碼不工作:使用write()創建一個臨時文件C

while((n = read(0,buf,sizeof(buf))) > 0) { 
     int tempfile = open("testfile", O_TRUNC | O_CREAT, 0666); 
     write (tempfile , buf , sizeof(buf)); 
     close(tempfile); 
     process("testfile"); 
    } 

我不應該使用任何標準輸入輸出的東西。

當我查看我創建的文件時,它有0個字節,但緩衝區本身有正確的信息....有人可以幫助他們看到我出錯的地方嗎?

我可以在文件名上使用進程並正確讀取它們。

+2

您應該在** while循環之前打開您的輸出文件**,然後關閉它。您現在正在執行的方式現在會在每個循環中重新初始化文件。 – fvu

+0

在每次寫入更多數據之前,是否有更好的方法清除文件中的數據? –

+0

所以你的意思是這是故意的?也就是說,一個讀取,然後是一個寫入,文件被另一個進程讀取,等等?如果是這樣的話,你在做的事情看起來像一個內部進程通信機制,如果是這樣的話,我會看看更合適的機制,比如管道或套接字 - 你確定每次寫入東西時都必須清除臨時文件在裏面? – fvu

回答

5

您已指定O_TRUNC | O_CREAT作爲開放標誌,但未指定O_RDWRO_WRONLY

您還可能要寫入n字節,而不是sizeof(buf),因爲剩餘的sizeof(buf) - n字節未初始化。

+0

對不起,但我現在有一個問題,現在它工作(感謝幫助我)。當它需要標準輸入時,它會一直抓住它,直到我給它一個空行,然後它一次完成所有的過程。有沒有辦法讓它不這樣做? –