高级I/o函数
1:dup函数和dup2函数
dup函数创建一个新的文件描述符,该新文件描述符和原有文件描述符oldfd指向相同的文件、管道或者网络连接。并且dup返回的文件描述符总是取系统当前可用的最小整数值。dup2和dup类似,不过它将 返回第一个不小于oldfd的整数值。dup和dup2失败时返回-1并设置errno
int new_fd = dup(fd); //new_fd = 1 //new_fd和fd指向相同的文件。
//进行重定向
int new_fd = dup2(fd, 1); //new_fd = 1,相当于close(1)+然后返回的new_fd和fd指向相同的文件。
4:对文件操作时的缓存类型
缓存类型分为三种,分别是全缓存、行缓存和无缓存。
全缓存:填满标准I/O缓存区才进行实际的I/O操作。磁盘上的了件用标准I/O打开,默认都是全缓存的。当缓存区填满或者进行flush操作时候才会进行磁盘操作。
行缓存:当输入输出遇到换行符时候就是行缓存了。标准输入和标准输出都是行缓存。
无缓存:不对I/O操作进行缓存,对流的读写可以立即操作实际文件。典型例子就是标准出错。
举例说明:标准输出是行缓存,只有在写满缓冲或者遇到换行符时才输出。也可以修改缓存方式。调用setvbuf函数,将缓存类型改为无缓存。
2:sendfile函数
作用:主要用于将服务器上的文件发送给客户端。
曾经应用在:tinyhttp中的cat()函数,以前的做法:读取文件到char *buff中,然后send即可。
应用:inyhttp程序的逻辑为:一个无线循环,一个请求,创建一个线程,之后线程函数处理每个请求,然后解析HTTP请求,做一些判断,之后判断文件是否可执行,不可执行,打开文件,输出给客户端(浏览器),可执行就创建管道,父子进程进行通信

浙公网安备 33010602011771号