F_GETOWN, F_SETOWN, F_GETSIG 和 F_SETSIG 被用于IO可获取的信号。

F_GETOWN:获取当前在文件描述词 fd上接收到SIGIO 或 SIGURG事件信号的进程或进程组标识 。

F_SETOWN:设置将要在文件描述词fd上接收SIGIO 或 SIGURG事件信号的进程或进程组标识 。

F_GETSIG:获取标识输入输出可进行的信号。

F_SETSIG:设置标识输入输出可进行的信号。

使用以上命令,大部分时间程序无须使用select()或poll()即可实现完整的异步I/O。

F_SETOWN 设置接收SIGIO和SIGURG信号的进程ID或进程组ID。正的arg指定一个进
程ID,负的arg表示等于arg绝对值的一个进程组ID。

这样理解可能会好些: F_SETOWN:设置拥有文件描述符fd的进程或进程组标识(这样才能接收来自fd所指向的设备文件产生的SIGIO或SIGURG事件信号)

当进程使用fcntl系统调用执行F_SETOWN命令时,属主进程的进程ID号就被保存在filp->f_owner中。这一步是必需的,目的是为了让内核知道应该通知哪个进程。

然后为了真正启动异步通知机制,用户程序还必须在设备中设置FASYNC标志,这通过fcntl的F_SETFL命令完成的。
执行完这两个步骤之后,输入文件就可以在新数据到达时请求发送一个SIGIO信号。该信号被发送到存放在filp->f_owner中的进程(如果是负值就是进程组)。

个人理解就是 驱动发送一个 SIGIO信号 信号到内核,内核发送给应用程序

fasync 百度一下

f_flags = fcntl(fd, F_GETFL);
fcntl(fd, F_SETFL, f_flags | FASYNC);
在设备文件中添加FASYNC标志,驱动中就会调用将要实现的test_fasync函数。
三个步骤执行后,一旦有信号产生,相应的进程就会收到。

fcntl(fd, F_SET_OWNER, getpid())
这样设备文件 跟 进程产生联系

【Linux 驱动】异步通知机制