Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Linux字符设备驱动程序:如何处理信号?_C_Linux_Kernel_Linux Device Driver - Fatal编程技术网

C Linux字符设备驱动程序:如何处理信号?

C Linux字符设备驱动程序:如何处理信号?,c,linux,kernel,linux-device-driver,C,Linux,Kernel,Linux Device Driver,我正在尝试创建一个小的char设备驱动程序,它创建一个文件/dev/foobar。在文件操作回调中,我有 ssize_t read(file* filp, char* buf, size_t count, loff_t* f_pos) { printk(KERN_INFO "device_read(%p,%s,%d)", filp, buf, count); return 0; } ssize_t write(file* filp, char* buf, size_t cou

我正在尝试创建一个小的char设备驱动程序,它创建一个文件
/dev/foobar
。在文件操作回调中,我有

ssize_t read(file* filp, char* buf, size_t count, loff_t* f_pos) 
{ 
   printk(KERN_INFO "device_read(%p,%s,%d)", filp, buf, count);
   return 0;

}

ssize_t write(file* filp, char* buf, size_t count, loff_t* f_pos) 
{
   printk(KERN_INFO "device_write(%p,%s,%d)", filp, buf, count);
   return 0;
}
但是,当我尝试使用
cat/dev/foobar
读取文件时,它会完全填满消息缓冲区,系统会停止运行,我必须删除
/var/log/
或其部分内容,因为我的虚拟驱动器已满


我不能用
Ctrl-C
或其他方法中止读取。如何使进程可中止?

read
函数返回0意味着EOF,因此
cat
命令不应重复调用该函数。但是从
write
返回0只需告诉VFS重新运行此函数。您确定问题是由读取文件而不是写入文件引起的(例如,使用输出重定向
/dev/foobar
)?@Tsyvarev是的,您是对的。我不确定是否与问题有关,但使用%s打印缓冲区通常是个坏主意。它不包括以null结尾的字符串,这在缓冲区中通常是不正确的。@MarcinKajzler;我复制粘贴了这个,我基本上对内核编程一无所知。