- 主题: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.*