博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dup等复制文件描述符函数
阅读量:6198 次
发布时间:2019-06-21

本文共 1001 字,大约阅读时间需要 3 分钟。

[root@bogon code]# cat b.c#include
#include
#include
#include
#define MAX_SIZE 5int main(){ int fd=open("a.c",O_RDWR); int fd1,fd2,fd3,len; char buf[MAX_SIZE]; len=read(fd,buf,MAX_SIZE); buf[len]='\0'; printf("fd: %s \n",buf);; fd1=dup(fd);//复制fd文件描述符,注意文件偏移量是共享的,所以它的文件偏移量是fd当前的文件偏移量 len=read(fd1,buf,MAX_SIZE); buf[len]='\0'; printf("fd1: %s \n",buf);; return 0;}[root@bogon code]# gcc b.c[root@bogon code]# ./a.outfd: linux fd1: oswin [root@bogon code]# cat a.clinuxoswindowsoshelloworldfine[root@bogon code]#

类似的还有int dup2(int oldfd,int newfd)如果旧的描述符没有关闭,该函数会隐式关闭,不过为了安全起见还是用close(oldfd)关闭比较好,用newfd来复制oldfd

除此之外还有一个int dup3(int oldfd,int newfd,int flags),也就是复制oldfd用newfd代替,其中flags可以设置标志位,不过目前只支持一个标志O_CLOEXEC,开启该标志位后子进程就不能够使用该文件描述符了
还有一个更加灵活的复制文件描述符的方法
newfd=fcntl(oldfd,F_DUPFD,startfd);这个方法好处在于可以把复制的文件描述符大小落在一定范围(大于或等于startfd)

转载于:https://www.cnblogs.com/biaopei/p/7730630.html

你可能感兴趣的文章
Flymeos插桩适配教程
查看>>
Elasticsearch教程(九) elasticsearch 查询数据 | 分页查询
查看>>
C#的delegate简单练习
查看>>
还在用PS磨皮去皱?看看如何用神经网络高度还原你的年轻容貌!
查看>>
YARN中内存的设置
查看>>
java 基础2
查看>>
大端模式与小端模式、网络字节顺序与主机字节顺序
查看>>
微信支付申请90%的商户都卡在这儿了,申请微信支付,商户功能设置详细说明...
查看>>
jsp九大内置对象
查看>>
制作一款微信表情
查看>>
高仿Instagram 页面效果android特效
查看>>
jsonp跨域访问+AES,RSA加密
查看>>
我的友情链接
查看>>
Juniper 基于路由的×××
查看>>
OSI七层模型03——数据封装
查看>>
UMail轻松搭建linux邮件服务器(一体盘安装)
查看>>
HDU - 2018 - 母牛的故事(dp)
查看>>
配置Splunk发送邮件
查看>>
51nod挑的部分5级题
查看>>
基于matlab的fft变换中参数的设置
查看>>