read函数只是一个通用的读文件设备的接口。是否阻塞需要由设备的属性和设定所决定。一般来说,读字符终端、网络的socket描述字,管道文件等,这些文件的缺省read都是阻塞的方式。如果是读磁盘上的文件,一般不会是阻塞方式的。但使用锁和fcntl设置取消文件O_NOBLOCK状态,也会产生阻塞的read效果。
在默认情况下,read函数是阻塞的。即,当调用read函数时,如果没有数据可供读取,它将会阻塞住并等待数据的到来。一旦有数据到来,read函数将会返回读取到的字节数,然后程序继续执行。 阻塞模式对于某些场景来说是非常有用的,特别是在需要精确控制数据的读取速度时。例如,当从标准输入读取用户的输入时,我们希望程序能够暂...
1. read函数是一个阻塞函数,即在读取数据时会一直等待,直到有数据可读或者出错。可以通过设置文件描述符的属性为非阻塞模式来避免阻塞。 2. read函数可能会读取比count指定的字节数少的数据,需要多次调用read函数直到读取到count个字节的数据为止。 3. read函数读取的数据会保存到buf中,需要保证buf足够大以容纳读取的...
读常规文件是不会阻塞的,不管读多少字节,read一定会在有限的时间内返回。从终端设备或网络读则不一定,如果从终端输入的数据没有换行符,调用read读终端设备就会阻塞,如果网络上没有接收到数据包,调用read从网络读就会阻塞,至于会阻塞多长时间也是不确定的,如果一直没有数据到达就一直阻塞在那里。同样,写常规文件是不会...
read默认时阻塞的,功能是读取给定的len长度的字节到buf。 If the file offset is at or past the end of file, no bytes are read, and read() returns zero. 如果读取完毕或者socket close了,那么返回0. 如果返回-1,表示错误,在errno中。 但是如果是socket并且在创建时被设置为非阻塞的,如果返回-1并且err...
read函数是Linux下不带缓存的文件I/O操作函数之一,所谓的不带缓存是指一个函数只调用系统中的一个函数。另外还有open、write、lseek、close,它们虽然不是ANSI C的组成部分,但是POSIX的组成部分。 在对read的使用过程中,发现对其返回值的处理比较重要,这里做一下总结。
不知题主的read是指socket的read还是文件的read。默认情况下,socket的read是阻塞的;对文件进行read,要看内核态的read接口是注册为同步接口还是异步接口(可参见file_operations结构体)
不知题主的read是指socket的read还是文件的read。默认情况下,socket的read是阻塞的;对文件进行read,要看内核态的read接口是注册为同步接口还是异步接口(可参见file_operations结构体)
O_NONBLOCK 如果路径名指向 FIFO/块文件/字符文件,则把文件的打开和后继 I/O设置为非阻塞模式 O_NDELAY 表示用于设置非阻塞方式。同时通知Linux系统,这个程序不关心DCD信号线所处的状态(端口的另一端是否激活或者停止)。如果用户没有指定这个标志,则进程将会一直处在睡眠状态,直到DCD信号线被激活。