我有一个疑问。
我打开了内核并更改了目录linux-3.1.1/fs/open.c
我在open.c中更改了以下代码。
SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, int, mode)
{
long ret;
printk(KERN_EMERG "Testing\n");
...
}
我只加了这一行:
printk(KERN_EMERG "Testing");
并包括库:<linux/kernel.h>
和 <linux/printk.h>
所以我编译并重新启动了我的Linux(Ubuntu)。
在重启过程中,屏幕上出现了很多"Testing",所以到目前为止还好。
但现在我有一个问题。 我用C语言创建了这个程序。
int main()
{
size_t filedesc = open("testefile2.txt",O_CREAT | O_WRONLY,0640);
printf("%d",filedesc);
}
我编译并执行了这个程序,它的表现良好。但是我不明白为什么“Testing”没有出现在shell中。我的意思是,如果当我重新启动电脑时会出现很多单词“Testing”,为什么当我执行上面的程序时这个单词不会出现。只是补充一下,我在上面的代码中包含了以下库:
unistd.h
,fcntl.h
,stdio.h
,stdlib.h
。谢谢大家。
printk()
并不会出现在你期望的位置。当你打开另一个虚拟控制台(或终端)并输入sudo tail -f /var/log/dmesg
,你能看到你的Testing
消息吗? - mpontillo