- 主题:nonblocking open有没有啥思路?
- 一般的nonblocking都是先获得fd,然后对这个fd做nonblocking的read/write。
 但是对于regular file来说,fd = open(path...)本身也是要读磁盘的,"open"自己就不是nonblocking。
 有没有其他的系统调用可以取代open来做nonblocking?
 从man page里看open + O_NONBLOCK是不行的。
 
 感觉思路应该是类似socket,先用api1 "socket"得到fd,然后设置成nonblocking,再用api2 "connect"。
 2步走的方法做到了nonblocking,但是打开普通文件好像只有"open",没有别的系统调用了。
 --
 FROM 27.26.0.*
 
- 这个看起来是可以的,不过要很新的kernel才支持,目前还用不上。
 
 【 在 lambdai 的大作中提到: 】
 : io_uring有一个操作是IOURING_OP_OPENAT
 : - 来自「最水木 for iPhone12,8」
 --
 FROM 27.26.4.*
 
- open/read/write都需要nonblocking。
 不是不怕,而是read/write已经有方法了,只有open没有方法。
 
 【 在 lambdai 的大作中提到: 】
 : 好奇问一下为什么之后读写不怕阻塞,反而担心open?
 : :
 : - 来自「最水木 for iPhone12,8」
 --
 FROM 137.69.117.*
 
- select/poll/epoll确实主要是给socket用的。
 regular file io可以用aio_read系列,或者io_submit系列,但是都没解决open的问题。
 
 【 在 lambdai 的大作中提到: 】
 : 这几个核心都是file ops的poll吧。不是说普通磁盘上文件的实现总是会返回可写可读吗?
 : 如果lz是说的bsd socket file,能很好地支持epoll,那就不会用open创建fd了吧
 : :
 : ...................
 --
 FROM 137.69.117.*
 
- 感觉seek操作应该不需要磁盘操作,没仔细研究过。
 
 【 在 pfan117 的大作中提到: 】
 : lseek也能non-blocking吗?
 --
 FROM 27.26.154.*