1. 复制一个现有的描述符(cmd=F_DUPFD). 2. 获得/设置文件描述符标记(cmd=F_GETFD或F_SETFD). 3. 获得/设置文件状态标记(cmd=F_GETFL或F_SETFL). 4. 获得/设置异步I/O所有权(cmd=F_GETOWN或F_SETOWN). 5. 获得/设置记录锁(cmd=F_GETLK , F_SETLK或F_SETLKW). 1. cmd值的F_DUPFD : F_...
1 int f_setown(struct file *filp, unsigned long arg, int force) 2 { 3 ... 4 pid = find_pid(who); //获取当前进程的pid 5 result = __f_setown(filp, pid, type, force); //内部主要调用f_modown函数 6 ... 7 } 8 static void f_modown(struct file *filp, struct pid *pid, enum...
1、设置驱动程序的拥有者是本进程。使用fcntl(fd, F_SETOWN, getpid()); 其中fd是打开设备文件的文件描述符,通过getpid()函数获取本进程的PID。 2、文件默认标志是没有设置FASYNC标志位,需要设备该标志位,才能同步。首先获取默认配置flags =fcntl(fd, F_GETFL); 然后将FASYNC标志设置进去fcntl(fd, F_SETFL, f...
为了使设备支持异步通知机制,驱动程序中涉及3项工作。 (1)支持F_SETOWN命令,能在这个控制命令处理中设置filp->f_owner为对应进程ID。不过此项工作已由内核完成,设备驱动无需处理。 (2)支持F_SETFL命令的处理,每当FASYNC标志改变时,驱动程序中的fasync()函数将得以执行。因此,驱动中应该实现fasync()函数。 (3)在...
F_GETOWN:获取当前在文件描述词 fd上接收到SIGIO 或 SIGURG事件信号的进程或进程组标识 。 F_SETOWN:设置将要在文件描述词fd上接收SIGIO 或 SIGURG事件信号的进程或进程组标识 。 F_GETSIG:获取标识输入输出可进行的信号。 F_SETSIG:设置标识输入输出可进行的信号。
fcntl(fd, F_SETOWN, getpid()); fcntl(fd, F_SETFL, FASYNC); tcgetattr(fd,&oldtio); newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD; newtio.c_iflag = IGNPAR | ICRNL; newtio.c_oflag = 0; newtio.c_lflag = ICANON; ...
2.使用fcntl的F_SETOWN命令,设置套接字所有者。 3.使用fcntl的F_SETFL命令,置O_ASYNC和O_NONBLOCK标志,允许套接字信号驱动I/O。 注意,必须保证在设置套接字所有者之前,向系统注册信号处理程序,否则就有可能在fcntl调用后,信号处理程序注册前内核向应用交付SIGIO信号,导致应用丢失此信号。
1)通过F_SETOWN I/O控制命令设置设备文件的拥有者为本进程,这样从设备驱动发出的信号才能被本进程接收到。 fcntl(fd,F_SETOWN,getpid()); 2)通过F_SETFL I/O控制命令设备设备文件以支持FASYNC,即异步通知模式。 flags=fcntl(fd,F_GETFL);/* 获取当前的进程状态 */fcntl(fd,F_SETFL,flags|FASYNC);/* 开...
获得/设置文件状态标记(cmd=F_GETFL或F_SETFL). 获得/设置异步I/O所有权(cmd=F_GETOWN或F_SETOWN). 获得/设置记录锁(cmd=F_GETLK,F_SETLK或F_SETLKW). 当多个用户共同使用、操作一个文件也即文件共享的情况下,Linux通常采用给文件上锁的方法来避免产生竞争。
常用的cmd: (1) 复制一个已有的描述符(cmd = F_DUPFD/F_DUPFD_CLOEXEC) (2) 获取/设置文件描述符标志(cmd = F_GETFD/SETFD) (3) 获取/设置文件状态标志(cmd = F_GETFL/F_SETFL) (4) 获取/设置异步I/O所有权(cmd = F_GETOWN/F_SETOWN) (5) 获取/设置记录锁(cmd = F_GETLK/F_SETLK/F_...