完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
知道都是懒人 代码我COPY这里了 求试试再给答案
#include #include #include void my_func(int sign_no) { if(sign_no==SIGINT) printf("I have get SIGINT n"); else if(sign_no==GINQUIT) printf("I have get SIGQUIT n"); } int main() { printf("Waitting for signal SIGINT or SIGQUIT n"); /* 注册信号处理函数 */ signal(SIGINT,my_func); signam(SIGQUIT,my_func); pause(); exit(0); } |
|
|
|
我就纠结了 少个n 他竟然跳过了main中的printf 执行pause 然后我给他个中断信号 他输出的不是SIGINT对应的PRINTF 而是main中的PRINTF 如果说是printf缓冲区的问题 我缺少n执行后 回车N次都没反应 而给他个信号 他又结束了
|
|
|
|
printf将内容写到输出缓冲区,不加n的话,就暂时不写到屏幕上。当你发送SIGINT信号时, 信号处理函数执行, 其中的n起作用,屏幕上显示内容。
你可以试试将所有n都去掉, 这样应该是在函数结束时才显示printf的打印信息。 |
|
|
|
学习中,还不懂
|
|
|
|
这涉及到行缓冲和满缓冲的问题,我们的系统标准IO操作是使用行缓冲的,也就是遇到n就把缓冲区的内容刷出屏幕,你试一下不要n,加个fflush(stdout);函数,这一样会先打印那句话,因为我们手动把缓冲区的内容刷出来了,
建议LZ百度一下行缓冲和满缓存 |
|
|
|
LZ,标准输出属于行缓冲,行缓冲输出的条件有三种:1.缓冲区满;2.使用fflush函数冲刷缓冲区;3.换行符'n'。馒头科技
|
|
|
|
还有程序正常结束后 也会刷新的奥 |
|
|
|
|
|
|
|
|
|
|
|
涉及到缓冲区的问题我倒没搞过,建议lz百度下吧
|
|
|
|
好!!!!!!!!!!!!!!!!!1
|
|
|
|
感觉好高大上啊。
|
|
|
|
只有小组成员才能发言,加入小组>>
「含关键代码」基于AM3352/AM3354/AM3359的Linux开发案例分享
4885 浏览 0 评论
87393 浏览 0 评论
【高手问答】如何做到精通linux技术?资深工程师带你突破难点
4710 浏览 2 评论
3602 浏览 2 评论
解读Linux :先从创建一个文件夹用来存放jdk压缩文件开始
2470 浏览 0 评论
1987浏览 3评论
1259浏览 1评论
求解:aarch64交叉编译工具已经安装成功,环境变量已经配置,怎么将系统架构切换为ARM的架构
1332浏览 0评论
电脑和虚拟机可以互ping,电脑和开发板也可以互ping,但是虚拟机和开发板ping不通是什么原因
1226浏览 0评论
1166浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-12 12:58 , Processed in 1.485053 second(s), Total 71, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号