在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函数的应用.
signal 函数是用于设置信号量的处理函数为自定义的。
SIGINT是用户在终端上按下ctrl+c的而产生信号量
它的系统默认的处理函数为终止正运行的进程
现在把它改成按ctrl+c后,是全局变量count加1的操作
当用户在终端输入回车后该进程结束。
且又把SIGINT的处理函数为默认的。
当我把上述程序保存为t.cpp时
利用gcc -o t t.cpp
产生如下错误
/tmp/ccGsoxH2.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
解决方法用 gcc -o t t.cpp -lstdc++
为什么会出现这个错误:是因为你用gcc编译.cpp文件.按系统默认.cpp文件是c++的文件格式
另一个方法是用g++ -o t t.cpp 也是可以的
还有一种方法是把文件保存为.c格式,反正里面全是c的代码
然后用gcc -o t t.c或者是g++ -o t t.c 都是OK的