第13章 守护进程和inetd 超级服务器

syslog()
daemon_init()
setuid()
setgid()

第14章 高级IO

标准I/O函数库,支持3种缓冲

缓冲(读写存储设备(硬盘),或者网络 合并读写,可以大大提高性能, 当然也可以不合并; 每次读写操作就立即 发送到指定输入输出(写进硬盘))

  • 全缓冲(fully buffering):意味着只在出现下列情况才发生I/O

    1.缓冲区满

    2.进程显示调用fflush

    3.进程调用exit终止自己

    标准IO缓冲区的大小 通常为8192 byte

  • 行缓冲(line buffering):意味着只在出现下列情况才发生I/O

    1.换行符

    2.进程显示调用fflush

    3.进程调用exit终止自己

  • 不缓冲(unbuffering): 意味着每次调用标准I/O输出函数,都才发生I/O


套接字超时(3种 都适用于输入输出 例如 read、write、recvfrom、sendto; 第三种只支持套接字描述符; )

1)调用alarm,它在指定超时期满时产生SIGALRM信号。这个方法涉及信号处理,而信号处理在不同的实现上存在差异,而且可能干扰进程中现有的alarm调用。

//产生SIGALRM信号,为connect设置超时

{ 代码见书...}

//产生SIGALRM信号,为recvfrom设置超时

{ 代码见书...}

2)在select中阻塞等待IO(select 有内置的时间限制) 以此代替直接阻塞在read、write上的调用

//用select 为recvfrom设置超时
int readable_timeo(int fd,int sec){ //--- lib/readable_timeo.c
fd_set rset;
struct timeval tv;
FD_ZERO(&rset);
FD_SET(fd, &rset);
tv.tv_sec = sec;
tv.tv_usec = 0;
return (select (fd+1, &rset,NULL,NULL,&tv)); //>0 if descriptor is readable
}

3)使用较新的SO_RCVTIMEO和SO_SNTIMEO 套接字选项。这个方法的问题在于并非所有的实现 都支持这两个套接字选项。(只支持套接字描述符)

//用SO_RCVTIMEO为recvfrom设置超时
void dg_cli(FILE *fp, int sockfd,const SA*pservaddr,socklen_t servlen)
{ //--- advio/dgclitimeo.c
int n;
char sendline[MAXLINE],recvline[MAXLINE+1];
struct timeval tv;
tv.tv_sec = 5;
tv.tv_usec = 0;
Setsockopt(sockfd, SOL_SOCKET, SO_RECVTIMEO, &tv, sizeof(tv));
while(Fgets(sendline, MAXLINE, fp)!= NULL){
Sendto(sockfd, sendline, strlen(sendline), 0, pservaddr, servlen);
n= recvfrom(sockfd, recvline, MAXLINE, 0,NULL,NULL);
if(n<0){
if(errno == EWOULDBLOCK){
fprintf(stderr,"socket timeout! \n");
contine;
}else
err_sys("recvfrom error \n");
}
recvline[n] =0;//null terminate
Fputs(recvline, stdout);
}

http://linux.die.net/man/2/read

http://linux.die.net/man/2/write

http://linux.die.net/man/2/pwrite

 #include <unistd.h>
ssize_t read(int fd, void *buf, size_t count); //read - read from a file descriptor
ssize_t write(int fd, const void *buf, size_t count); //write - write to a file descriptor //pread, pwrite - read from or write to a file descriptor at a given offset
ssize_t pread(int fd, void *buf, size_t count, off_t offset);
ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset);

http://linux.die.net/man/2/recv

http://linux.die.net/man/2/send

 //recv, recvfrom, recvmsg - receive a message from a socket
//send, sendto, sendmsg - send a message on a socket
#include <sys/types.h>
#include <sys/socket.h> ssize_t recv(int sockfd, void *buf, size_t len, int flags);
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);
ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags); ssize_t send(int sockfd, const void *buf, size_t len, int flags);
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);
ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags);

http://linux.die.net/man/2/readv

http://linux.die.net/man/2/writev

 #include <sys/uio.h>
ssize_t readv(int fd, const struct iovec *iov, int iovcnt);//分散输入 The readv() system call reads iovcnt buffers from the file associated with the file descriptor fd into the buffers described by iov ("scatter input").
ssize_t writev(int fd, const struct iovec *iov, int iovcnt);//集中输出 The writev() system call writes iovcnt buffers of data described by iov to the file associated with the file descriptor fd ("gather output").
ssize_t preadv(int fd, const struct iovec *iov, int iovcnt, off_t offset);
ssize_t pwritev(int fd, const struct iovec *iov, int iovcnt, off_t offset);

http://linux.die.net/man/3/aio_read

#include <aio.h>

int aio_read(struct aiocb *aiocbp); //aio_read - asynchronous read   异步读
int aio_write(struct aiocb *aiocbp); //aio_write - asynchronous write 异步写
aio_一系列......

read() recv() recvv() revcfrom() revcmsg()

write() send() sendv() sendto() sendmsg()

aio_read() aio_write()

区别和用途


第15章 unix 域协议(本地套接字)

用于本地socket 连接,主要用途是IPC 进程间通信

socket(AF_LOCL,...);

socketpair()

unix network programming(3rd)Vol.1 [第13~15章]《读书笔记系列》的更多相关文章

  1. unix network programming(3rd)Vol.1 [第2~5章]《读书笔记系列》

    13~22章 重要 第2章 传输层: TCP/ UDP / STCP (Stream Control Transmission Protocol) TCP 可靠,有重传机制,SYN队列号 UDP 不可 ...

  2. unix network programming(3rd)Vol.1 [第1章]《读书笔记系列》

    文章最开头介绍了 获取时间的C/S 模型的代码, 还用了实现了IPV6的版本 unix 介绍了errno值,以及在多进程/多线程中的问题 多线程中不用全局errno,而是用返回值 处理error 详细 ...

  3. Unix NetWork Programming(unix环境编程)——环境搭建(解决unp.h等源码编译问题)

    此配置实例亲测成功,共勉,有问题大家留言. 环境:VMware 10 + unbuntu 14.04 为了unix进行网络编程,编程第一个unix程序时遇到的问题,不能包含unp.h文件,这个感觉和a ...

  4. 【转】【Raspberry Pi】Unix NetWork Programming:配置unp.h头文件环境

    一.初衷 近期正在做网络计算编程的作业.要求平台为unix/linux,想着Raspberry Pi装的Debian系统也是Linux改的,也应该能够勉强用着,所以就用它来做作业了! 二.说明 先把环 ...

  5. 【转】Unix NetWork Programming——环境搭建(解决unp.h等源码编译问题)

    下面开始用简单但典型的客户端和服务器端程序说明如何进行网络编程.这一小节讲的是客户端,一个用来连接并读取服务器发送来的时间的客户端. 这里涉及到了编写代码,因此要 搭建unix网络编程环境 unix系 ...

  6. unix network programming volume1 sorce code build and get(UNIX網絡編程卷1第三版)

    source code下载地址:unpv13e.tar.gz下载 (也有放一份在google cloud storage) compile 1. ./configure 2. cd lib make ...

  7. Unix NetWork Programming -- 环境搭建(Ubuntu 12.04 x86_64)

    1. 下载源代码:http://www.ituring.com.cn/book/download/60498ad9-ede6-4023-a92b-04d47be23578 2. 解压文件后进入文件根目 ...

  8. UNIX 网络编程第五章读书笔记

    刚看完 UNIX 第五章内容,我想按照自己的方式将自己获得的知识梳理一遍,以便日后查看!先贴上一段简单的 TCP 服务器端代码: #include <sys/socket.h> #incl ...

  9. lua元表和元方法 《lua程序设计》 13章 读书笔记

    lua中每个值都有一个元表,talble和userdata可以有各自独立的元表,而其它类型的值则共享其类型所属的单一元表.lua在创建table时不会创建元表. t = {} print(getmet ...

随机推荐

  1. easy ui datagrid在没有数据时显示相关提示内容

    $(function () { $('#dg').datagrid({ fitColumns: true, url: 'product.json', pagination: true, pageSiz ...

  2. Hadoop1.0.3集成eclipse开发

    本文来自:http://www.ilablog.org/%E7%BC%96%E8%AF%91hadoop-eclipse%E6%8F%92%E4%BB%B6/ 本人由于工作原因目前没有亲自尝试,那位尝 ...

  3. submit和button提交表单的区别

    <html> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&quo ...

  4. 响应式菜单(bootstrap)

    <nav class="navbar navbar-default" role="navigation"> <div class=" ...

  5. Flume学习——Flume中事务的定义

    首先要搞清楚的问题是:Flume中的事务用来干嘛? Flume中的事务用来保证消息的可靠传递. 当使用继承自BasicChannelSemantics的Channel时,Flume强制在操作Chann ...

  6. Maven Source jar

    http://blog.csdn.net/symgdwyh/article/details/4407945

  7. jmeter 响应结果分析一

    转自:http://www.cnblogs.com/Carrie_Liang/archive/2008/11/05/1327604.html Jmeter测试结果分析这一篇,我打算分成上下两部分.上篇 ...

  8. codeforces #313 div1 C

    同BZOJ 3782 上学路线 QAQ 还比那个简单一点 把坐标(1,1)-(n,m)平移成(0,0)-(n-1,m-1) 设dp[i]表示从(1,1)出发第一次经过障碍且到达第i个障碍的方案数 首先 ...

  9. PNG优化/压缩

    我们总是希望 PNG 图像的容量能够小些.小些.再小些.优化 PNG 图像,可以用以下几个工具: 1.Optipng Optipng 是命令行工具,直接在其后追加所需优化的 PNG 图像即可 2.Pn ...

  10. org.apache.http.ProtocolException: Target host is not specified

    对于httpClient4.3访问指定页面,可以从下面的demo抽取方法使用. 注意:对于URL必须使用 http://开始,否则会有如下报错信息: Caused by: org.apache.htt ...