我目前正在用 C 撰寫一個類似 UNIX 的 shell,為了測驗我的 shell,我需要創建一個程式來創建分段錯誤,但不Core Dumped被列印。
我已經撰寫了一個執行段錯誤(類似int *a = 0; *a = 3;)的程式,當我運行它時,終端列印Segmentation Fault (Core Dumped)。
我應該寫什么代碼,或者我應該使用什么命令,以便我的終端只Segmentation Fault在我運行它時列印,而不是Segmentation Fault (Core Dumped)?
編輯:我不僅希望縮短輸出,我還想創建一個在崩潰時不創建核心轉儲的程式(例如,當我WCOREDUMP在程式的退出狀態上使用宏時,由waitpid,它回傳 1。)
解決方案:我做了一個只提高SIGUSR1信號的程式;通過運行它,我得到一個“崩潰”但沒有(core dumped)被列印 - 這就是我正在尋找的。
代碼,以防有人需要它:
#include <signal.h>
int main()
{
raise(SIGUSR1);
return 0;
}
終端輸出:
User defined signal 1
uj5u.com熱心網友回復:
你可以搞砸signal.h
`
#include <signal.h>
void sig_func(int sig)
{
exit(1);
}
int main (void)
{
signal(SIGSEGV, sig_func); // sets a new signal function for SIGSEGV
raise(SIGSEGV); // causes the signal function to be called
return 0;
}
`
在此示例中,它應該以 1 退出,不列印任何內容,將 更改sig_func為您需要的任何內容。
順便說一句...有了信號,您將完全覆寫發出該信號時發生的事情。如果您擺脫了退出呼叫,程式將繼續運行,無論構成什么未定義的行為。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/456460.html
上一篇:在C中使用星形圖案并排列印字母
