在struct filed有个成员void *private_data;文档上说明该成员是系统调用时保存状态信息非常有用的资源。起初一直不明白这个private_data在驱动 open函数中的作用,后来发现private_data 这个成员在open函数被调用的时候 linux 系统就已经将其幅值为NULL,之后可供用户使用,或者比较悲剧的被用户忽略改域。 在详细的阅读源...
private_data struct file { ... /* needed for tty driver, and maybe others */ void *private_data; }; fp->private_data可用于实现驱动会话。 如在open 操作时分配会话上下文,挂在 private_data上,其他操作调用时 fp->private_data 可以获得当前用户的会话信息。 提高驱动的安全性 为了避免用户非法输入...
struct file*vm_file;/* File we map to (can be NULL). */ 3、vm_private_data 成员 vm_area_struct结构体 中的vm_private_data成员 用于指向 " 进程 “的” 用户虚拟地址空间 " 中的 " 私有数据 " ; 代码语言:javascript 复制 void*vm_private_data;/* was vm_pte (shared mem) */ 二、vm_...
1. 3、vm_private_data 成员 vm_area_struct结构体 中的vm_private_data成员 用于指向" 进程 “的” 用户虚拟地址空间 "中的" 私有数据 " ; void * vm_private_data; /* was vm_pte (shared mem) */ 1. 二、vm_area_struct 结构体完整源码 vm_area_struct结构体完整源码 : /* * This struct de...
1. file->private_data = kmalloc(sizeof(struct xxx), GFP_KERNEL); 然后在接下来的read/write/ioctl中,我们就可以通过file->private_data取到与此文件关联的数据。 最后,在xxx_release中,我们会释放file->private_data指向的内存。 如果只是上面这几种流程访问file->private_data所指向的数据,基本上不会出问...
vm_private_data:私有数据存储 /* * This struct defines a memory VMM memory area. There is one of these * per VM-area/task. A VM area is any part of the process virtual memory * space that has a special rule for the page-fault handlers (ie a shared * library, the executable area ...
字符设备架构调用我们注册的接口函数open会传递参数inode和file,inode->i_cdev指向了我们注册的pmydev[i]->cdev,在open中通过inode->cdev来识别具体的设备,通过container_of来找到对应的pmycdev结构体变量,并将其私有数据隐藏到file结构的private_data中,进而识别同一个驱动操作一类设备。
and maybe others */void*private_data;#ifdefCONFIG_EPOLL/* Used by fs/eventpoll.c to link all the hooks to this file */structlist_headf_ep_links;structlist_headf_tfile_llink;#endif/* #ifdef CONFIG_EPOLL */structaddress_space*f_mapping;#ifdefCONFIG_DEBUG_WRITECOUNTunsignedlongf_mnt_writ...
void *private_data:声卡的私有数据,可以在创建声卡时通过参数指定数据的大小 二、声卡的建立流程: 2.1.1. 第一步,创建snd_card的一个实例: 代码语言:javascript 复制 struct snd_card*card;int err;...err=snd_card_create(index,id,THIS_MODULE,0,&card); index...
Socket 层:从 struct file 里面的 private_data 得到 struct socket,根据里面 ops 的定义,调用 inet_recvmsg 函数。 Sock 层:从 struct socket 里面的 sk 得到 struct sock,根据里面 sk_prot 的定义,调用 tcp_recvmsg 函数。 TCP 层:tcp_recvmsg 函数会依次读取 receive_queue 队列、prequeue 队列和 backlog ...