在linux編寫程序如下
#include #include #include int count=0; void ctrl_c_count(int); main() { int c; void (*old_handler)(int); old_handler=signal(SIGINT,ctrl_c_count); while((c=getchar()!='\n')) ; printf("Ctrl_C count=%d\n",count); signal(SIGINT,old_handler); } void ctrl_c_count(int i) { printf("Ctrl_C\n"); count++; } |
這個程序的功能是研究signal函數(shù)的應(yīng)用.
signal 函數(shù)是用于設(shè)置信號量的處理函數(shù)為自定義的。
SIGINT是用戶在終端上按下ctrl+c的而產(chǎn)生信號量
它的系統(tǒng)默認(rèn)的處理函數(shù)為終止正運(yùn)行的進(jìn)程
現(xiàn)在把它改成按ctrl+c后,是全局變量count加1的操作
當(dāng)用戶在終端輸入回車后該進(jìn)程結(jié)束。
且又把SIGINT的處理函數(shù)為默認(rèn)的。
當(dāng)我把上述程序保存為t.cpp時
利用gcc -o t t.cpp
產(chǎn)生如下錯誤
/tmp/ccGsoxH2.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
解決方法用 gcc -o t t.cpp -lstdc++
為什么會出現(xiàn)這個錯誤:是因為你用gcc編譯.cpp文件.按系統(tǒng)默認(rèn).cpp文件是c++的文件格式
另一個方法是用g++ -o t t.cpp 也是可以的
還有一種方法是把文件保存為.c格式,反正里面全是c的代碼
然后用gcc -o t t.c或者是g++ -o t t.c 都是OK的