大佬教程收集整理的这篇文章主要介绍了Linux内核:来自“open”系统调用的printk不起作用,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我打开内核,然后更改了目录linux-3.1.1 / fs / open.c
我在open.c中更改了以下代码.
SYSCall_DEFINE3(open,const char __user *,filename,int,flags,modE) { long ret; printk(KERN_EMERG "TesTing\n"); ... }
我只把这行:printk(KERN_EMERG“TesTing”);
我包括库:< linux / kernel.h>和< linux / printk.h>
所以我编译并重新启动了我的linux(Ubuntu).
在重新启动期间,屏幕上出现了很多“测试”.
所以到现在为止它好了.
但现在我有一个问题.
我在c中创建了这个程序.
int main() { size_t filedesc = open("testefile2.txt",O_CREAT | O_WRONLY,0640); printf("%d",filedesc); }
我编译了这个程序并执行并且运行良好.
但我不明白为什么“测试”没有出现在sHell上.
我的意思是,如果我重新启动电脑时会出现很多“测试”这个词,为什么当我执行上面的程序时,这个词并没有出现.
只是添加我在上面的代码中包含这些库:
unistd.h,fcntl.h,stdio.h,stdlib.h
感谢你们.
我认为,这是printk消息抑制的效果. (更准确地说:限速)
检查消息日志或控制台
printk: ### messages suppressed.
串.
如果最近有很多消息,此功能将停止打印消息.
实际代码为3.1内核:http://lxr.linux.no/#linux+v3.1.1/kernel/printk.c#L1621
1621 * printk rate limiTing,lifted from the networking subsystem. 1622 * 1623 * This enforces a rate limit: not more than 10 kernel messages 1624 * every 5s to make a denial-of-service attack impossible. 1625 */ 1626 DEFINE_RATELIMIT_STATE(printk_ratelimit_state,5 * HZ,10); 1627 1628 int __printk_ratelimit(const char *funC)
所以,由于开放的系统调用非常受欢迎(只是做一个strace -e open / bin / ls – 我将获得15个开放的系统调用来启动最简单的ls),速率限制将生效.它将限制您的信息仅在5秒内打印一次;单个“爆发”中不超过10条消息.
我只能建议创建一个具有已知UID的特殊用户,并在printk中添加一个UID检查,并在其他printk-in-open代码中添加.
以上是大佬教程为你收集整理的Linux内核:来自“open”系统调用的printk不起作用全部内容,希望文章能够帮你解决Linux内核:来自“open”系统调用的printk不起作用所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。