大佬教程收集整理的这篇文章主要介绍了试图在Linux上密切关注,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
>故意缓慢/无响应的NFS安装
>@L_801_5@FUSE驱动程序
但是由于这些设置有点痛苦,我想知道是否有更多现成的我可以使用它可以提供所需的行为.
您可以实现自己的角色设备驱动程序.从Linux Device Drivers (3rd edition)第3章的模板开始,调整它除了在close()上暂停一段时间外什么都不做. (您可以使用第7章中的msleep或msleep_interruptible进行阻止.)
实际上,如果没有其他人建议其他东西,我可以通过调整我现有的一些代码来快速推动这一点.你多久需要它?
[编辑]
好的,试试这个……
@H_605_16@makefile文件:ifneq ($(KERNELRELEASE),) obj-m := closer.o else KERNELDIR ?= /lib/modules/$(sHell uname -r)/build PWD := $(sHell pwd) default: modules %: $(MAKE) -C $(KERNELDIR) M=$(PWD) "$@" .PHONY: default endif
closer.c:
#include <linux/init.h> #include <linux/module.h> #include <linux/miscdevice.h> #include <linux/delay.h> #include <linux/fs.h> MODULE_DESCRIPTION("Block-on-close driver"); MODULE_AUTHOR("Nemo <nemo@self-evident.org>"); MODULE_LICENSE("GPL"); #define VERSION "20110705" MODULE_VERSION(VERSION); #define MY_NAME "closer" int my_open(struct inode *,struct file *); int my_release(struct inode *,struct file *); ssize_t my_read(struct file *,char __user *,size_t,loff_t *); ssize_t my_write(struct file *,const char __user *,loff_t *); static struct file_operations my_fops = { .owner = THIS_MODULE,.open = my_open,.read = my_read,.write = my_write,.release = my_release,}; static struct miscdevice my_dev; int __init my_init(void) { int err = 0; printk(KERN_INFO "%s: loading version %s\n",MY_NAME,VERSION); my_dev.minor = MISC_DYNAMIC_MINOR; my_dev.name = MY_NAME; my_dev.fops = &my_fops; err = misc_register(&my_dev); if (err) printk(KERN_ERR "%s: misc_register Failed,error %d\n",err); return err; } int my_open(struct inode *inode,struct file *filp) { return 0; } ssize_t my_read(struct file *file,char __user *p,size_t n,loff_t *off) { return 0; } ssize_t my_write(struct file *file,const char __user *p,loff_t *off) { return n; } int my_release(struct inode *inode,struct file *filp) { int err = 0; /* 10 second sleep,interruptible. */ if (msleep_interruptible(10 * 1000) > 0) err = -EINTR; return err; } void __exit my_exit(void) { misc_deregister(&my_dev); printk(KERN_INFO "%s: unloaded\n",MY_Name); } module_init(my_init); module_exit(my_exit);
使用“insmod closer.o”加载模块.如果您有一个相当现代/完整的Linux环境,udev将自动唤醒并生成/ dev / close.如果没有,您可以自己创建设备节点:
@H_331_35@mknod /dev/closer c `tr : ' ' </sys/class/misc/closer/dev`(即/ sys / class / misc / closer / dev表示要使用的major:minor.)
读写工作类似/ dev / null;即任何读取的EOF,任何写入的成功.
我已经验证了“cat< / dev / closer”在close()中阻塞了10秒.我还没有创建一个测试来捕获SIGINT(或其他),并验证它实际上是否导致了EINTR. 针对2.6.32内核构建.让我知道它对你有用.
以上是大佬教程为你收集整理的试图在Linux上密切关注全部内容,希望文章能够帮你解决试图在Linux上密切关注所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。