当前位置: 技术问答>linux和unix
printf和printk的诡异现象,有强人进来解释下的吗?
来源: 互联网 发布时间:2016-05-02
本文导语: 举个例子 printf("aaa"); sendto(......). 我们知道sendto是API,然后会转到内核中处理,我在内核里面处理的地方加 printk("bbb"); 我们认为打印顺序是 aaa bbb 实际上很惊人,我这边是 bbb aaa | 那你可以...
举个例子
printf("aaa");
sendto(......).
我们知道sendto是API,然后会转到内核中处理,我在内核里面处理的地方加
printk("bbb");
我们认为打印顺序是
aaa
bbb
实际上很惊人,我这边是
bbb
aaa
printf("aaa");
sendto(......).
我们知道sendto是API,然后会转到内核中处理,我在内核里面处理的地方加
printk("bbb");
我们认为打印顺序是
aaa
bbb
实际上很惊人,我这边是
bbb
aaa
|
那你可以在printf()之前加入如下一条语句看看:
setvbuf(stdout, (char *)NULL, _IONBF, 0); //设置为立即显示,不缓存
另外可以在printf()之后加入如下一条语句:
fflush(stdout); // 显示将内容刷新到标准输出!
try it!
good luck!
setvbuf(stdout, (char *)NULL, _IONBF, 0); //设置为立即显示,不缓存
另外可以在printf()之后加入如下一条语句:
fflush(stdout); // 显示将内容刷新到标准输出!
try it!
good luck!
|
个人认为
printf()函数是调用write()系统调用函数向标准输出设备写数据。
因此,printf也算是系统调用吧。所以应该是printk先打印出来。
printf()函数是调用write()系统调用函数向标准输出设备写数据。
因此,printf也算是系统调用吧。所以应该是printk先打印出来。
|
而printk()函数是直接使用了向终端写函数tty_write()。