72-套接字与标准I/O
之前我们使用read,write及其他们的变体(recv,send)函数读写I/O,这些函数都是围绕着描述符工作的。我们将这一类I/O称为UnixI/O.我们也可以使用标准I/O函数库来读写I/O,它由ANSIC标准进行规范,比如fputs...
之前我们使用read,write及其他们的变体(recv,send)函数读写I/O,这些函数都是围绕着描述符工作的。我们将这一类I/O称为UnixI/O.我们也可以使用标准I/O函数库来读写I/O,它由ANSIC标准进行规范,比如fputs...
很久以前我们早已学过各种各样的进程间通信的方法,比如无名管道,有名管道共享内存等等。而使用unix域协议进行通信,也是一种进程通信的方法。所以以后面试官问你进程间通信手段,不要忘记了这种^_^.知道了unix域的套接字地址以及绑定后,其它的...
1.普通VS抽象前面我们已经学习过了sockaddr_un结构,它有一个成员sun_path,通常它保存的是一个以'\0'为结尾的绝对路径。一旦绑定了一个绝对路径,就会生成一个文件。这种unix域套接字地址我们称为普通unix域套接字地址。...
Unix域协议这一章的第一篇文章就是讨论如何在进程间传递描述符,可是后面似乎我们把这件事忘了。其实不然,我们一直在为这件事做铺垫,本文将进一步逼近“真相”。辅助数据(Ancillary),也叫控制数据,实际上在前面讲解recvmsg和sen...
如果涉及到父子进程间的通信,我们就没有必要弄的那么麻烦,不需要再创建套接字地址,不需要绑定。函数socketpair会创建两个连接好的套接字。1.socketpair函数intsocketpair(intfamily,intprotocol...
使用Unix域套接字作为辅助数据传递的另一种数据是用户凭证(usercredential)。FreeBSD使用structcmsgcred结构来传递凭证,此时辅助数据的type类型是SCM_CREDS.不过,我们讨论的是Linux,不同于F...
回顾一下上一篇文章,阻塞版本的writen固然好用,但是也有风险,我们不能把希望寄托在增加客户端TCP发送缓冲区和接收缓冲区的大小上,而是应该采取更加有保障的措施。前面说过,可以使用非阻塞IO,也可以使用多进程或多线程。本文,我们先来讨论一...
第一次,我们写的服务器客户端是停等版本,像下面这样:while(1){read(stdin);writen(sockfd);read(sockfd);writen(stdout);}后来,我们用select改进了它:while(1){rfd...
上一篇文章中,我们已经见识了非阻塞I/O+缓冲区改写回射客户端的复杂性。本文我们使用多线程来重写客户端,后面可以看到,这个版本要简洁的多。1.程序路径本文使用的程序托管在gitos上,你可以使用下面的命令clone到你的电脑上:gitclo...
非阻塞i/o上调用connect比非阻塞i/o上调用read/write要麻烦一点,一方面connect函数不能像read/write那样反复调用,它只能调用一次;另一方面,connect函数返回错误,并不代表连接建立不成功。1.非阻塞co...
本文来一点比较轻松的话题,来写一个客户端,从时间服务器(daytimeserver)上取得时间并打印。1.daytime服务器daytime服务器我们不用自己写了,这个网站列举了很多现成的daytime服务器地址:http://tf.nis...
不知道你是否还记得异常连接——accept返回前连接终止。这篇文章探讨的是在accept函数调用前,连接被异常终止的情况。不过,很遗憾我们并未观察到accept产生异常。man手册中解释,linux会把错误转移到accept返回的新套接字(...