dup等复制文件描述符函数
[root@bogon code]# cat b.c
#include<stdio.h>
#include<error.h>
#include<unistd.h>
#include<fcntl.h>
#define MAX_SIZE 5
int 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.out
fd: linux
fd1: oswin
[root@bogon code]# cat a.c
linuxoswindowsoshelloworldfine
[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)
dup等复制文件描述符函数的更多相关文章
- UNIX环境编程学习笔记(4)——文件I/O之dup复制文件描述符
lienhua342014-08-23 UNIX 提供了两个函数 dup 和 dup2 用于复制一个现存的文件描述符. #include <unistd.h> int dup(int fi ...
- 复制文件描述符---dup
函数功能:复制文件描述符 头文件:#include<unistd.h> 函数原型:int dup(int oldfd) 参数说明:oldfd:旧的文件描述符 返回值:成功返回-个新的文件描 ...
- fcntl函数用法——复制文件描述符
文件描述符复制和输出重定向dup() 用最小的文件描述符来复制,从0开始搜素.复制文件描述符后,最小文件描述符指向被复制描述符指向的文件.dup2(int oldfd,int newfd) 强制用ne ...
- Unix系统编程()复制文件描述符
Bourne shell的IO重定向语法2>&1,意在通知shell把标准错误(文件描述符2)重定向到标准输出(文件描述符1).因此下列命令将把标准输出和标准错误写入result.log ...
- Linux系统编程--文件描述符的复制dup()和dup2()【转】
本文转载自:http://blog.csdn.net/tennysonsky/article/details/45870459 dup() 和 dup2() 是两个非常有用的系统调用,都是用来复制一个 ...
- linux系统编程之文件与IO(八):文件描述符相关操作-dup,dup2,fcntl
本节目标: 1,文件共享 打开文件内核数据结构 一个进程两次打开同一个文件 两个进程打开同一个文件 2,复制文件描述符(dup.dup2.fcntl) 一,文件共享 1,一个进程打开两个文件内核数据结 ...
- fcntl函数用法——操纵文件描述符状态
fcntl函数:操纵文件描述符,改变已经打开的文件的属性int fcntl(int fd, int cmd, ... //arg );cmd选项:一.复制文件描述符:F_DUPFD二.更改设置文件描 ...
- [转] linux系统文件流、文件描述符与进程间关系详解
http://blog.sina.com.cn/s/blog_67b74aea01018ycx.html linux(unix)进程与文件的关系错综复杂,本教程试图详细的阐述这个问题. 包括: ...
- OSLab文件描述符
日期:2019/3/24 内容:Linux文件描述符. 一.基本概念 文件描述符(File Descriptor) 一个非负整数.应用程序利用文件描述符来访问文件.打开现存文件或新建文件时,内 ...
随机推荐
- jenkins部署web项目到tomcat(五)
(1)maven构建web项目 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...
- es6-priomise
Promise是异步编程的一种解决方案,它有三种状态,分别是 pending-进行中 resolved-已完成 rejected-已失败 状态一旦改变,就无法再次改变状态,这也是它名字promise- ...
- 【Linux优化】Linux安装之后的优化
yum source configmv /etc/yum.repos.d/CentOS-Base.repo{,.bkp} wget -O /etc/yum.repos.d/CentOS-Base.re ...
- 重载方法写delete请求
#encoding=utf-8#__author__="Lanyangyang" import unittestimport requestsimport json # This ...
- Centos7安装配置iptable
CentOS7默认的防火墙不是iptables,而是firewalle. 安装iptable iptable-service #先检查是否安装了iptables service iptables st ...
- CSS学习笔记-01-2D转换模块
首先,mark 一下 css3 新增 的 2D 转换之 W3school 的链接: http://www.w3school.com.cn/css3/css3_2dtransform.asp 转换是使 ...
- jvm内存配置参数
请看下面题目: 对于jvm内存配置参数: -Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3 其最小内存值和Survior区总大小分别是: a. 51 ...
- <Yarn><Node Labels>
Go through official docs For the official docs of Yarn node label, plase see here. Overview Node lab ...
- [MyBatis] MyBatis理论入门
什么是MyBatis iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs) 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射. MyB ...
- HDU 6090 17多校5 Rikka with Graph(思维简单题)
Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he ...