linux文件设备与I/O:read/write函数 与 阻塞 Block 一,read 函数从打开的设备或文件中读取数据 #include ssize_t read(int fd, void *buf, size_t count); 返回值:成功返回读取的字节数,出错返回-1并设置errno,如果在调read之前已到达文件末尾,则这次 read返回0 读上来的数据保存在缓冲区buf 中,同时文件的当前读写位置向后移。注意这个读写位置和使用C标准I/O库时的读写位置有可能不同,这个读写位置是...
by wangxy-andy - Linux文档专区 - 2009-08-30 22:38:55 阅读(1368) 回复(0)
一,read 函数从打开的设备或文件中读取数据 #include ssize_t read(int fd, void *buf, size_t count); 返回值:成功返回读取的字节数,出错返回-1并设置errno,如果在调read之前已到达文件末尾,则这次 read返回0 读上来的数据保存在缓冲区buf 中,同时文件的当前读写位置向后移。注意这个读写位置和使用C标准I/O库时的读写位置有可能不同,这个读写位置是记在内核中的,而使用C标准I/O库时的读写位置是用户空间I/...
该程序是APUE2第14章程序清单14-1 [code] #include "head.h" char buf[500000]; int main(int argc, char** argv) { int nwrite, ntowrite; char *ptr = NULL; ntowrite = read(STDIN_FILENO, buf, sizeof(buf)); fprintf(stderr, "read %d bytes\n", ntowrite); set_fl(STDOUT_FILENO, O_NONBLOCK); ptr = buf; ...
为了实现一些功能,我想用有名通道实现进程之间的通讯。希望在没有新的信息的时候,进程自动阻塞,在有新信息的时候进程被唤醒,然后,应用fork等等。 所以我想在用有名通道通讯的时候,带上阻塞的功能。读有名通道的程序已经实现了阻塞,但是写有名通道的程序还没实现。读的程序如下,虽然阻塞了,但是当运行写的程序的时候也不会被唤醒!!!: #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #i...
刚刚开始学习socket :oops: :oops: :oops: read write 与 recv send 的 区别是非阻塞 与 阻塞吗?
帮我看看 什么情况下 会出现 这种tcp的情况, 控制窗口的值变成0. 这是在我server上抓到的数据包。 server监听 10000的端口。
一段时间以后, 就出现 client的回应包中的tcp.win 的参数变为0了。 。然后server这边就阻塞在 write这个函数上了。
但是client给 server发的数据包 还是正常的
00:27:30.073587 IP 58.221.37.151.ndmp > 58.221.37.148.46957: . ack 3673 win 46
我看到UNIX网络编程的373页说:对于非阻塞的TCP套接口,如果发送缓冲区中只有部分空间,则调用write时, 返回值将是内核能够拷贝到该缓冲区中的字节数。 意思是不是说:比如缓冲区中有10个字节的空间,但wirte要发送12字节的数据,那wrtie返回10。 我觉得,在 write返回时,实际的拷贝行为已经发生(即内核把数据从应用进程的缓冲区拷贝到内核的发送缓冲区), 比如,我觉得上面的例子就拷贝了10个字节, 我这样理解对么?
我用的是linux 2.6.14的kernel, 程序中的C/S的socket用的都是unblock模式。 在Server 端做如下操作: write(fd, buf, buf_len); //return val > 0 close(fd); 在Client端: read(fd, buf, buf_len); //有时return 0,指对端被关。有时能返回正值。 而且return 0之前没有受到server端write的数据。 不知道有没有高手能解释一下这种情况?