完善资料让更多小伙伴认识你,还能领取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
|
|
|
|
|
|
感觉好高大上啊。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
TuyaOpen开源 + DshanPi-A1(RK3576)开发板的Tuya IoT平台接入与AI大模型整合方案(笔记)
1327 浏览 0 评论
「含关键代码」基于AM3352/AM3354/AM3359的Linux开发案例分享
5241 浏览 0 评论
87854 浏览 0 评论
【高手问答】如何做到精通linux技术?资深工程师带你突破难点
5308 浏览 2 评论
3997 浏览 2 评论
2335浏览 1评论
SiRider S1芯擎工业开发板测评+1.防止黑客入侵通信监控系统(PSA)
1662浏览 0评论
TuyaOpen开源 + DshanPi-A1(RK3576)开发板的Tuya IoT平台接入与AI大模型整合方案(笔记)
1332浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-3 23:41 , Processed in 0.935450 second(s), Total 99, Slave 81 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
9675