程序为什么在两次ctrl+c后printf无任何输出

ithiker 2014-11-08 08:47:48
如题,正常情况下应该在按第三次ctrl+c时printf有输出的

#include <stdio.h>
#include <signal.h>

int main()
{
const int BUFSIZE = 100;
char buf[BUFSIZE];
int i;

signal(SIGINT, SIG_IGN);
while(getc(buf))
putc(buf);

signal(SIGINT, SIG_DFL);

for(i = 1; ;++i)
printf("%d%c", i, (i%15 ? ' ' : '\n'));

return 0;
}
...全文
202 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ithiker 2014-11-10
  • 打赏
  • 举报
回复
引用 6 楼 zhxianbin 的回复:
我觉得你的代码看不出来 第三次ctrl+c时printf 应该有输出
第一次ctrl+c, 由于信号函数signal(SIGINT, SIG_IGN);设置了SIG_IGN : ignore标志,故忽略ctrl+c, 第二次ctrl+c, 由于signal(SIGINT, SIG_DFL);设置了SIG_DFL : default标志,恢复ctrl+c为正常处理 第三次按ctrl+c或ctrl+z, 应该有printf输出
空的 2014-11-10
  • 打赏
  • 举报
回复
没看懂这程序要干嘛。。。
竹影半墙 2014-11-10
  • 打赏
  • 举报
回复
fflush() ?
中国小菜鸟 2014-11-10
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <signal.h>

int break_while = 0;

void signal_handler2(int signum)
{
        printf("2st signal is %d\n", signum);
        signal(SIGINT, SIG_DFL);
        break_while = 1;
}

void signal_handler(int signum)
{
        printf("1st signal is %d\n", signum);
        signal(SIGINT, signal_handler2);
}

void main()
{
        char buf[100] = {0};
        int i;

        signal(SIGINT, signal_handler);

        while(gets(buf) && !break_while)
                puts(buf);
        for (i=1; ; ++i)
                printf("%d%c", i, i%15 ? ' ' : '\n');
}
zhxianbin 2014-11-10
  • 打赏
  • 举报
回复
引用 9 楼 gigglesun 的回复:
[quote=引用 6 楼 zhxianbin 的回复:] 我觉得你的代码看不出来 第三次ctrl+c时printf 应该有输出
第一次ctrl+c, 由于信号函数signal(SIGINT, SIG_IGN);设置了SIG_IGN : ignore标志,故忽略ctrl+c, 第二次ctrl+c, 由于signal(SIGINT, SIG_DFL);设置了SIG_DFL : default标志,恢复ctrl+c为正常处理 第三次按ctrl+c或ctrl+z, 应该有printf输出[/quote] ctrl+c 正常处理程序就结束了
zhxianbin 2014-11-09
  • 打赏
  • 举报
回复
引用 2 楼 gigglesun 的回复:
[quote=引用 1 楼 zhxianbin 的回复:] "%d%c" 改为 "%d%c\n"
linux上不可行[/quote] 为什么 Linux 不可行?windows下可行?
zhxianbin 2014-11-09
  • 打赏
  • 举报
回复
我觉得你的代码看不出来 第三次ctrl+c时printf 应该有输出
zhxianbin 2014-11-09
  • 打赏
  • 举报
回复
引用 4 楼 gigglesun 的回复:
[quote=引用 3 楼 zhxianbin 的回复:] [quote=引用 2 楼 gigglesun 的回复:] [quote=引用 1 楼 zhxianbin 的回复:] "%d%c" 改为 "%d%c\n"
linux上不可行[/quote] 为什么 Linux 不可行?windows下可行?[/quote] 不明白,这也是我发这个贴的原因 linux和windows的信号机制有所不同?[/quote] 我说的是 printf 不是信号
ithiker 2014-11-09
  • 打赏
  • 举报
回复
引用 3 楼 zhxianbin 的回复:
[quote=引用 2 楼 gigglesun 的回复:] [quote=引用 1 楼 zhxianbin 的回复:] "%d%c" 改为 "%d%c\n"
linux上不可行[/quote] 为什么 Linux 不可行?windows下可行?[/quote] 不明白,这也是我发这个贴的原因 linux和windows的信号机制有所不同?
ithiker 2014-11-09
  • 打赏
  • 举报
回复
引用 1 楼 zhxianbin 的回复:
"%d%c" 改为 "%d%c\n"
linux上不可行
zhxianbin 2014-11-08
  • 打赏
  • 举报
回复
"%d%c" 改为 "%d%c\n"

23,124

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧