在下面的程序中,如果我取消注释
_XOPEN_SOURCE
行,当我按下C-c
时,我的程序会终止,如果我不注释那一行,同样的程序不会终止。有人知道_XOPEN_SOURCE
以何种方式影响信号处理吗?我使用gcc(4.6.3)和glibc(2.15)在Linux上运行。/* #define _XOPEN_SOURCE 700 */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
typedef void (*sighandler_t)(int);
void handle_signal(int signo)
{
printf("\n[MY_SHELL] ");
fflush(stdout);
}
int main()
{
int c;
signal(SIGINT, SIG_IGN);
signal(SIGINT, handle_signal);
printf("[MY_SHELL] ");
while ((c = getchar()) != EOF) {
if (c == '\n')
printf("[MY_SHELL] ");
}
printf("\n");
return 0;
}
char c
:不行,不行,不行,不行,不行。EOF
需要是带外信号。这就是为什么getchar
返回一个int
的原因。 - Dave