簡體   English   中英

無法將Linux程序的輸出存儲到文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM