2017-07-03 40 views
1

我的代碼寫入文件如下。我是否需要擔心任何錯誤情況? 我是否需要處理以下錯誤情況?關於I/O操作我是否需要處理以下代碼中的任何錯誤情況?

1.Logical誤差,對I/O操作

2.Read/writing誤差,

3.Exception安全。

如果是,我該怎麼做,如果沒有,是否安全?

char command[150]={0}; 

sprintf(command, "/mypath/mycommand > %s", FileName); 

system(command); 
+0

是的,你應該經常檢查錯誤,如果你調用失敗的函數。但是(對於這種情況,使用'system')除非你嘗試運行的命令返回命令本身的特定錯誤的特定錯誤代碼,否則所有你會知道的是命令是否運行。它不是C++函數,因此不會拋出異常。 –

+0

此外,['sprintf'](http://en.cppreference.com/w/cpp/io/c/fprintf)函數在理論上也可能失敗。很少有人從它那裏檢查錯誤,甚至沒有經驗豐富的程序員。我建議使用'snprintf'代替,以減少緩衝區溢出的風險。或者使用['std :: ostringstream'](http://en.cppreference.com/w/cpp/io/basic_ostringstream)。 –

+0

1您可以檢查文件本身的存在。其次,在I/O操作期間,異常處理是必須的。但你必須自己做一些工作。我們可以指點,但可以做你想做的工作。 – MKR

回答

2

command可能會溢出,如果文件名是looooooooooooong。和system(3)返回-1上錯誤

參見man 3 system

返回的值是1的錯誤(例如,叉(2)失敗),以及以其他方式命令的 返回狀態。後者的返回狀態是 ,採用wait(2)中指定的格式。因此,命令 的退出代碼將爲WEXITSTATUS(狀態)。如果/ bin/sh不能執行, 退出狀態將是退出命令的狀態(127)。

如果命令的值爲NULL,則如果shell 可用,則system()返回非零值;如果不可用,則返回0。

system()不會影響任何其他子級的等待狀態。

也許輸出文件應該被刪除,如果發生錯誤。

0

我遵循的一般經驗法則是墨菲定律:任何可能出錯的東西最終都會出錯。考慮到這一點,我總是檢查錯誤和異常,除非有很好的理由檢查錯誤是不必要的或多餘的。但是,這些情況大部分也保持在最低限度。

在你的代碼的情況下,我會提出相同的建議:是否總是安全地忽略你的代碼的錯誤代碼?如果代碼遇到錯誤,是否有任何特定的操作?看看你的代碼,我相信有幾件事情可能會出錯(mycommand被用戶刪除/移動/重命名,其執行權限被改變等)。這些會影響你的程序的其餘部分嗎?

相關問題