Linux高级IO
来源:互联网 发布:费迪南德拳击 知乎 编辑:程序博客网 时间:2024/06/04 15:10
dup和dup2函数:用于标准输入输出的重定向
实例:基本的CGI服务器
/* 主要部分:从建立连接之后开始 @connfd 服务器开启监听之后接受连接的描述符 服务器输出到标准输出的内容直接被客户端获得。*/if( connfd < 0 ) //错误描述{ printf( "errno is : %d\n", errno); }else{ close( STDOUT_FILENO ); //关闭标准输出dup( connfd );//复制文件描述符,dup总是返回系统中最小的可用文件描述符,就是标准输出。 printf( "abc\n" ); close( connfd );}mmap和munmap函数:用于申请/释放一段内存空间。可用做进程间通信的共享内存,也可以将文件直接映射到其中。splice函数:用于在两个文件描述符之间移动数据(零拷贝)实例:零拷贝的回射服务器/* 主要部分:从建立连接之后开始@connfd 服务器开启监听之后接受连接的描述符*/if( connfd < 0 ) //错误描述{ printf( "errno is : %d\n", errno); }else{ int pipefd[2]; ret = pipe( pipefd ); //创建管道 assert( ret != -1 );ret = splice( connfd, NULL, pipefd[1], NULL, 32768, SPLICE_F_MOVE | SPLICE_F_MORE );//前后两个文件描述符至少有一个是管道 assert( ret != -1 );ret = splice( pipefd[0], NULL, connfd, NULL, 32768, SPLICE_F_MOVE | SPLICE_F_MORE);//前后两个文件描述符至少有一个是管道assert( ret != -1 ); close( connfd );}tee函数:在两个管道文件描述符之间复制数据(零拷贝)实例:实现Linux下tee程序(同时输出数据到终端和文件的程序)
/* tee程序:同时输出数据到终端和文件的程序 @filefd 要写入的文件描述符*/{ int filefd = open( argv[1], O_CREAT | OWRONLY | O_TEUNC, 0666 ); assert( filefd > 0 ); int pipefd_stdout[2];int ret = pipe( pipefd_stdout ); //创建管道assert( ret != -1 );int pipefd_file[2];int ret = pipe( pipefd_file ); //创建管道assert( ret != -1 );ret = splice( STDIN_FILENO, NULL, pipefd_stdout[1], NULL, 32768, SPLICE_F_MOVE | SPLICE_F_MORE );//前后两个文件描述符至少有一个是管道assert( ret != -1 ); ret = tee( pipefd_stdout[0], pipefd_file[1], 32768, SPLICE_F_NONBLOCK ); //前后两个文件描述符必须都为管道 assert( ret != -1 );ret = splice( pipefd_file[0], NULL, filefd, NULL, 32768, SPLICE_F_MOVE | SPLICE_F_MORE);//前后两个文件描述符至少有一个是管道 assert( ret != -1 ); ret = splice( pipefd_stdout, NULL, STDOUT_FILENO, NULL, 32768, SPLICE_F_MORE | SPLICE_F_MOVE ); assert( ret != -1 ); close( filefd ); close( pipefd_stdout[0] ); close( pipefd_stdout[1] ); close( pipefd_file[0] ); close( pipefd_file[1] ); return 0;}
0 0
- LINUX 高级IO操作
- 八、Linux--高级IO
- Linux 高级IO
- Linux高级IO
- linux 高级IO 磁盘映射IO
- linux高级IO——记录锁
- Linux环境高级编程:文件IO
- linux高级IO之readv/writev
- linux系统编程之高级IO
- 高级IO
- 高级IO
- 高级IO
- 高级IO
- 基于Linux平台的高级IO扩展函数
- 高级IO编程
- 12-高级IO
- 9 高级IO函数
- APUE高级IO
- centos7第一次安装jdk centos系统为Minimal版本也就是纯净版的
- 高德地图
- 学习reactJS笔记
- linux runtime pm机制的深入理解
- CenteOS6.5下Redis安装踩过的坑
- Linux高级IO
- hihocoder #1153 : Numeric Keypad
- 回溯法解n后问题
- CDR如何将绘图页面指定对象保存为JPG格式
- UIButton高亮(highlighted)下的边框颜色(borderColor)
- 软件性能测试的本质
- 4.0spring框架学习(四)自动装配
- App测试方法总结
- python 导入循环问题