fcntl函数用法——复制文件描述符
文件描述符复制和输出重定向
dup() 用最小的文件描述符来复制,从0开始搜素。复制文件描述符后,最小文件描述符指向被复制描述符指向的文件。
dup2(int oldfd,int newfd) 强制用newfd来复制oldfd close(1);dup(fd) == 》等价于dup2(fd,1)
int fcntl(int fd, int cmd, ... //arg ); 功能:操纵文件描述符,改变已打开文件属性。
fcntl(fd,F_DUPFD,fd_start) :cmd=F_DUPFD,从fd_start开始搜索一个可用的文件描述符。而dup从0开始搜索。
1 #include<unistd.h>
2 #include<sys/types.h>
3 #include<sys/stat.h>
4 #include<fcntl.h>
5 #include<stdlib.h>
6 #include<stdio.h>
7 #include<errno.h>
8 #include<string.h>
9 #define ERR_EXIT(m)\
10 do\
11 {\
12 perror(m);\
13 exit(EXIT_FAILURE);\
14 }while(0) //宏要求一条语句
15 int main(int argc,char*argv[])
16 {
17
18 int fd;
19 fd=open("test2.txt",O_WRONLY);
20 if(fd==-1)
21 ERR_EXIT("open error");
22
23 //复制文件描述符实现IO重定向。dup(fd),得到新的文件描述符跟前一个fd指向同一个文件,引用计数变为2
24 //close(1);
25 //dup(fd);//1被关闭,所以复制后返回的文件描述符为1.此时1指向test.txt.新文件描述符一定是当前最小的
26 //dup2(fd,1);//关掉1,1指向fd.
27 close(1);
28 if(fcntl(fd,F_DUPFD,0)<0)
29 ERR_EXIT("dup error");//从0开始搜索,1指向test2.txt
30 printf("hello\n");//不再输出到屏幕,而是到test2.txt. 总是输出到1所指向的设备。
31 return 0;
32 }
fcntl函数用法——复制文件描述符的更多相关文章
- fcntl函数用法——操纵文件描述符状态
fcntl函数:操纵文件描述符,改变已经打开的文件的属性int fcntl(int fd, int cmd, ... //arg );cmd选项:一.复制文件描述符:F_DUPFD二.更改设置文件描 ...
- dup等复制文件描述符函数
[root@bogon code]# cat b.c #include<stdio.h> #include<error.h> #include<unistd.h> ...
- 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:旧的文件描述符 返回值:成功返回-个新的文件描 ...
- 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,一个进程打开两个文件内核数据结 ...
- [转] linux系统文件流、文件描述符与进程间关系详解
http://blog.sina.com.cn/s/blog_67b74aea01018ycx.html linux(unix)进程与文件的关系错综复杂,本教程试图详细的阐述这个问题. 包括: ...
- OSLab文件描述符
日期:2019/3/24 内容:Linux文件描述符. 一.基本概念 文件描述符(File Descriptor) 一个非负整数.应用程序利用文件描述符来访问文件.打开现存文件或新建文件时,内 ...
随机推荐
- 多测师全方位面试题腾讯 _自动化面试题_高级讲师肖sir
作答注意:候选人可以两题都做,也可以两题任选一题做即可. 笔试题一:1.查询 https://www.newsmth.net/nForum/#!board/PieLove2.获取发贴时间是2020年8 ...
- 使用Python学习win32库进行内存读写
前言: 上一周,在52的精华帖中,看到有位大佬用Python制作了鬼泣5的修改器,看完才知道,原来Python也可以对内存进行操作,出于对技术的好奇,看完以后,决定自己也尝试一下. 要用到的工具: C ...
- 发布MeteoInfo 1.2.6
增加了对AWX卫星数据格式的支持(和C#版本的功能相当).在MeteoInfo中打开AWX数据: 在MeteoInfoLab中打开AWX数据:
- 互不侵犯(洛谷P1896)
题目:在N*N的棋盘里面放k个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 输入输出:输入N,K,输出有几种放置方法. ...
- spring boot:发送带附件的邮件和html内容的邮件(以163.com邮箱为例/spring boot 2.3.2)
一,网站哪些情况下需要发送电子邮件? 作为一个电商网站,以下情况需要发邮件通知用户: 注册成功的信息 用邮箱接收验证码 找回密码时发链接 发送推广邮件 下单成功后的订单通知 给商户的对账单邮件 说明: ...
- laravel job 队列
1.数据库建表 php artisan queue:table<span> </span>//队列任务表 php artisan queue:failed-table<s ...
- git学习(十) idea git reset 操作
git reset 是回滚操作,在 idea 中使用如下: Reset Type 有三种: Mixed 默认方式,只保留源码,回退 commit 和 index 信息 Soft 回退到某个版本,只回退 ...
- 在Linux上成功启动Jenkins却无法访问的问题
本鸟最近打算学习Jenkins,正准备在Linux上面鼓捣一番,,却没想被入门级别问题当头一棒 下载完jenkins.war,使用java -jar命令在8088端口开启服务:java -jar je ...
- maven项目导入并运行
idea导入maven工程流程 找到要导入的文件位置 打开导入 选择manve 一直next就好 选择jdk,选择自己的jdk--home就可以 点击finished 等待坐标导入,查看右侧maven ...
- java默认值
注意:此处默认值是在类成员时才可以被初始化有默认值 如果时在局部变量中,必须先自己初始化才可以使用,否则编译失败