文件鼠标点击复制粘贴调用内核的哪个函数
在终端中使用cp来复制粘贴文件,是通过read(oldfile)然后write(newfile)来完成的,即调用了read和write系统调用来读写,那么我通过鼠标点击复制粘贴会调用内核中的什么函数呢,我在write下添加了判断条件,通过cp可以打印相应的信息,复制粘贴就不能打印相应的信息。求解答! 楼主的“复制粘贴”是指文件级别的复制粘贴(资源管理器)还是指文本块级别的复制粘贴(编辑器)?如果是后者,应该跟X server的实现有关系吧?肯定是某种形式的进程间通讯,未必一定通过文件系统的read/write来实现的。 是文件级别的,我是要判断文件动作,如果文件进行了复制操作,会在dmesg中打印一条消息,cp我可以捕捉到,但是复制粘贴因为不走write?(read还是照样走的)所以我无法获取回复 2# nswcfd
也许是因为使用了sendfile之类的API?
能不能用strace验证一下? 鼠标点击怎么用strace回复 4# nswcfd
不好意思,对X的架构不熟悉,不知道。
尝试用jprobe对sys_open写了一个探针,里面打印出current->comm,
发现在ubuntu/gnome里面,鼠标粘贴此操作调用sys_open(mode=write)的时候,current及其parent进程分别是pool和gnome-session。
没研究过X,不知道这个pool对于哪个ELF?
gone-session貌似是个后台daemon,尝试attach一下(follow子进程)? sorry,应该attach nautilus(文件管理器), 而不是attach gnome-session
貌似是利用pipe + splice系统调用实现文件拷贝的。
在vfs层面对应f_op->splice_read、splice_write接口。 可以用perf/ ftrace这些工具分析一下 谢谢拉,使用鼠标复制粘贴的确是和终端cp不一样,鼠标复制粘贴是通过generic_file_splice_write,我还有一个问题,gedit编译文件是走的内核哪条路,好像write系统调用和splice_write都捕获不到回复 7# nswcfd
页:
[1]