[英]Fail to store output of linux program to a file
我有一個名為./mpace
的簡單程序(使用線程),該程序在線程函數中使用printf()
。 當我從終端運行它時,輸出將按其應有的方式打印,但是當我鍵入時:
**./mpace > text**
創建的文件為空。 有趣的是,昨天它運行良好。 我輸入:
echo "test" > text
檢查此功能是否存在嚴重問題,但是可以正常工作。 那么,我的程序意外開始無法寫入文件的原因可能是什么?
請注意,我不希望從代碼中使用fprintf()
,因為時間消耗至關重要。
非常感謝,使用fflush(stdout)即可解決問題。 我以為在新行中打印會刷新通道,但是正如paxdiablo在此處的評論中解釋的那樣,它不會:
除非換行符在格式字符串中,否則為什么在調用后printf不會刷新?
沒錯,應該提供盡可能多的信息,但是我認為為單個printf()共享100行代碼將是您閱讀的一個障礙。 我看到這是一個錯誤的決定,因為不使用fflush,並且程序被信號終止的事實不僅導致了問題,而且應該已經知道。
可能是一個緩沖問題。 僅當stdout
轉到字符設備時才對其進行行緩沖。 要檢查是否是問題所在,請在每次調用printf
之后手動調用fflush(stdout)
。 在程序終止之前,請確保正確清除了stdout
的輸出緩沖區。
可能是因為您使用的是>而不是>>,並且代碼可能以某種方式( 順便說一下,您沒有共享 )包含換行符(空白)並刪除了舊的換行符。 讓我給你看一個例子。
假設我們有一個名為file1.txt的文件,其中包含以下信息:
Michael Jimmy Dolores
而且我不會提取名稱Jimmy並將輸出重定向到另一個名為file2.txt的文件
cat file1.txt | grep "Jimmy" > file2.txt
現在,file2.txt包含:
吉米
現在,讓此命令運行3-4次,然后再次檢查該文件:
cat file2.txt
輸出:
吉米
為什么是這樣 ? 它應該是:
Jimmy Jimmy Jimmy Jimmy
好吧,因為我用的是>而不是>>。 現在讓我們再試一次:
michi@michi-laptop:~$ cat file1.txt | grep "Jimmy" >> file2.txt
michi@michi-laptop:~$ cat file1.txt | grep "Jimmy" >> file2.txt
michi@michi-laptop:~$ cat file1.txt | grep "Jimmy" >> file2.txt
michi@michi-laptop:~$ cat file1.txt | grep "Jimmy" >> file2.txt
輸出:
Jimmy Jimmy Jimmy Jimmy Jimmy
這可能是原因之一。
編輯:我來了另一個簡短的示例,讓我們用蒂米修改吉米:
Michael Timmy Dolores
記住file2.txt看起來像這樣:
Jimmy Jimmy Jimmy Jimmy Jimmy
現在,如果您運行:
cat file1.txt | grep "Jimmy" > file2.txt
我只是因為>而不是>>而得到一個空文件, file1.txt中沒有Jimmy。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.