文件描述符复制和输出重定向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…
fcntl函数:操纵文件描述符,改变已经打开的文件的属性int fcntl(int fd, int cmd, ... //arg  );cmd选项:一.复制文件描述符:F_DUPFD二.更改设置文件描述标志:F_GETFD .F_SETFD  文件描述符标志,是体现进程的文件描述符的状态.当前只定义了一个文件描述符标志FD_CLOEXEC.   0: exec时不关闭已经打开的文件描述符   1: exec时关闭已经打开的文件描述符三.获取或者设置文件状态标识:F_GETFL. F_SETFL(…
[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_S…
lienhua342014-08-23 UNIX 提供了两个函数 dup 和 dup2 用于复制一个现存的文件描述符. #include <unistd.h> int dup(int filedes); int dup2(int filedes, int filedes2); 返回值:若成功则返回新的文件描述符,如出错则返回-1. 由 dup 函数返回的文件描述符一定是当前可用文件描述符中的最小描述符.用 dup2 函数则可以通过参数 filedes2 指定目标文件描述符.如果filedes2…
函数功能:复制文件描述符 头文件:#include<unistd.h> 函数原型:int dup(int oldfd) 参数说明:oldfd:旧的文件描述符 返回值:成功返回-个新的文件描述符,失败-1.…
Bourne shell的IO重定向语法2>&1,意在通知shell把标准错误(文件描述符2)重定向到标准输出(文件描述符1).因此下列命令将把标准输出和标准错误写入result.log文件.(shell按从左至右的顺序处理IO重定向语句) shell通过复制文件描述符2实现了标准错误的重定向操作,因此文件描述2与文件描述符1指向同一个打开文件的句柄.可以通过调用dup和dup2来实现此功能. 对于这种重定向的操作,仅仅打开一个目标文件两次是远远不够的(第一次在描述符1上打开,第二次在描述符…
本文转载自:http://blog.csdn.net/tennysonsky/article/details/45870459 dup() 和 dup2() 是两个非常有用的系统调用,都是用来复制一个文件的描述符,使新的文件描述符也标识旧的文件描述符所标识的文件. 这个过程类似于现实生活中的配钥匙,钥匙相当于文件描述符,锁相当于文件,本来一个钥匙开一把锁,相当于,一个文件描述符对应一个文件,现在,我们去配钥匙,通过旧的钥匙复制了一把新的钥匙,这样的话,旧的钥匙和新的钥匙都能开启这把锁.对比于 d…
本节目标: 1,文件共享 打开文件内核数据结构 一个进程两次打开同一个文件 两个进程打开同一个文件 2,复制文件描述符(dup.dup2.fcntl) 一,文件共享 1,一个进程打开两个文件内核数据结构 说明: 文件描述符表:每个进程都有一张,彼此独立,每个文件描述符表项都指向一个文件表,文件描述符0(STDIN_FILENO).1(STDOUT_FILENO).2(STDERR_FILENO),默认已经打开,分别表示:标准输入,标准输出,标准错误设备. 文件表:每打开一个文件就对应一张文件表,…
http://blog.sina.com.cn/s/blog_67b74aea01018ycx.html linux(unix)进程与文件的关系错综复杂,本教程试图详细的阐述这个问题. 包括:     1.linux多/单进程与多/单文件对于文件流和描述符在使用时的关联情况及一些需要注意的问题.     2.fork,vfork流缓冲等对文件操作的影响.   1.linux文件系统结构 首先补充一点基础知识,了解一下linux文件系统.如下图所示:                        …
  日期:2019/3/24 内容:Linux文件描述符.   一.基本概念 文件描述符(File Descriptor) 一个非负整数.应用程序利用文件描述符来访问文件.打开现存文件或新建文件时,内核会返回一个文件描述符.读写文件也需要使用文件描述符来指定待读写的文件. 二.文件读写 头文件的解析 sys/stat.h status fcntl.h file control   int flags参数取值 必须取值:O_RDONLY.O_WRONLY.O_RDWR. 可选取值(两种取值通过 |…
每个进程在Linux内核中都有一个task_struct结构体来维护进程相关的 信息,称为进程描述符(Process Descriptor),而在操作系统理论中称为进程控制块 (PCB,Process Control Block).task_struct中有一个指针(struct files_struct *files; )指向files_struct结构体,称为文件 描述符表,其中每个表项包含一个指向已打开的文件的指针,如下图所示. 用户程序不能直接访问内核中的文件描述符表,而只能使用文件描述…
转自  http://blog.csdn.net/gzzheyi/article/details/7739556 表格可以参见APUE 第三版 P61. 文件描述符(进程级别): 1).在每个进程表中都有一个记录项,记录项中包含有一张打开文件描述符表,可将其视察为一个矢量(数组),每个描述符占用一项.与每个文件描述符相关联的是: (a).文件描述符标志. (b).指向一个文件表项的指针.(不同的文件描述符可以指向同一个文件表项,例如用dup函数复制文件描述符,得到一个新的文件描述符,但是它们指向…
先引入一个例子,该程序的目的是子进程向父进程传递文件描述符,并通过该文件描述符读取buf. #include <func.h> int main(){ int fds[2]; pipe(fds); if(!fork()){ close(fds[1]); int fd; read(fds[0], &fd, sizeof(fd)); printf("child fd = %d\n", fd); char buf[128] = {0}; read(fd, buf, siz…
linux fcntl 对文件描述符控制 linux fcntl 对文件描述符控制 linux fcntl 对文件描述符控制…
一.关于文件描述符 open()函数的file参数,除了可以接受字符串路径外,还可以接受文件描述符(file descriptor),文件描述符是个整数,对应程序中已经打开的文件. 文件描述符是操作系统内核为了高效管理已被打开的文件所创建的索引,是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用最终实现时都是通过文件描述符进行的.应用程序启动的时候,操作系统会自动分配三个文件描述符,其中0是标准输入,1是标准输出,2是标准错误.如果此时去打开一个新的文件,它的文件…
1.对重定向的理解 2.硬件设备和文件描述符 文件描述符到底是什么 3.Linux Shell 输出重定向 4.Linux Shell 输入重定向 5.结合Linux文件描述符谈重定向 6.Shell 对文件描述符的操作 7.改变当前shell环境的重定向目标 8.示例 1.对重定向的理解 Linux Shell 重定向分为两种,一种输入重定向,一种是输出重定向:从字面上理解,输入输出重定向就是「改变输入与输出的方向」的意思. 输入方向就是数据从哪里流向程序.标准输入方向是指数据从键盘流向程序,…
功能描述:根据文件描述词来操作文件的特性. 文件控制函数         fcntl -- file control 头文件: #include <fcntl.h>;          int fcntl(int fd, int cmd);          int fcntl(int fd, int cmd, long arg);          int fcntl(int fd, int cmd, struct flock *lock); [描述]            Fcntl()针…
文件描述符标志的概念 文件描述符标志(目前就只有一个close-on-exec): 它仅仅是一个标志,当进程fork一个子进程的时候,在子进程中调用了exec函数时就用到了这个标志.意义是执行exec前是否要关闭这个文件描述符.要把文件描述符标志和文件状态标志区分开来. 文件状态标志:在系统内核维护的系统打开文件表中,每一个系统文件表项都有一个关于write.read等的标志. close-on-exec是一个进程所有文件描述符(文件句柄)的位图标志,每个比特位代表一个打开的文件描述符的标志位,…
功能描述:根据文件描述词来操作文件的特性. 文件控制函数         fcntl -- file control LIBRARY         Standard C Library (libc, -lc) SYNOPSIS         #include <fcntl.h>;          int fcntl(int fd, int cmd);          int fcntl(int fd, int cmd, long arg);          int fcntl(int…
2. 文件I/O系统调用及文件描述符 2.1 文件I/O系统调用 (1)主要函数 函数 功能 函数 功能 open() 打开文件 read() 读取文件 creat() 创建文件 write() 写入文件 close() 关闭文件 lseek() 文件定位 注意 这些不带缓存的函数都是内核提供的系统调用.它们不是ANSI C的组成部分,但是POSIX的组成部分 (2)系统调用与C库 (3)文件操作方式 ①标准库函数:遵守ISO标准,基于流的I/O,对文件指针(FILE结构体)进行操作. ②系统调…
功能描述:根据文件描述词来操作文件的特性. #include <unistd.h> #include <fcntl.h>  int fcntl(int fd, int cmd);  int fcntl(int fd, int cmd, long arg);  int fcntl(int fd, int cmd, struct flock *lock); [描述] fcntl()针对(文件)描述符提供控制.参数fd是被参数cmd操作(如下面的描述)的描述符.针对cmd的值,fcntl…
使用系统调用的时候用文件描述符(file descriptor,简称fd)的时候比较多,但是操作比较原始.C库函数在I/O上提供了一些方便的包装(比如格式化I/O.重定向),但是对细节的控制不够. 如果过度依赖其中的一种只会徒增麻烦,所以知道两者的转换是很有必要的.FILE*是对fd的封装 当然,有人会说知道文件路径的话重新打开就是了,但是这会产生竞争条件(Race Conditions),首先重新打开文件,相当于是2个fd指向同一文件,然后如果在打开的期间文件被删除了又被新建了一个同名文件,2…
本节讨论一下几个问题: 1. 文件描述符. 2. 重定向. 3. 管道符 4. tee的用法. 1. 文件描述符. 在linux系统中一切皆文件.文件夹和设备都是文件.如何用来区别不同的文件呢?这里的区别不是我们在windows下看到的后缀名不同来区别.也不是我们在linux下用ls 命令看到的不同文件的列表.这里的文件描述符主要讨论的是对文件操作的一个标识符.无操作就无标识符.   比如两个进程同时在对同一个文件进行读操作. 如何区分这两个读操作呢?这就需要文件文件描述符来区别了.每一次打开一…
转载请说明出处:http://blog.csdn.net/cywosp/article/details/38965239   1. 概述     在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件.链接文件和设备文件.文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符.程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误.如果此…
转自:http://blog.csdn.net/cywosp/article/details/38965239 1. 概述     在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件.链接文件和设备文件.文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符.程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误.如果此时去打开一个新…
前言 在Linux系统中,一切设备都看作文件.而每打开一个文件,就有一个代表该打开文件的文件描述符.程序启动时默认打开三个I/O设备文件:标准输入文件stdin,标准输出文件stdout,标准错误输出文件stderr,分别得到文件描述符 0, 1, 2. 实例 现在来看一个 测试ttyname函数的实例(ttyname函数功能是返回在该文件描述符上打开的终端设备的路径名): #include "apue.h" int main(void) { char *name; if(isatty…
Linux中的文件描述符与打开文件之间的关系 导读 内核(kernel)利用文件描述符(file descriptor)来访问文件.文件描述符是非负整数.打开现存文件或新建文件时,内核会返回一个文件描述符.读写文件也需要使用文件描述符来指定待读写的文件. 1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件.链接文件和设备文件.文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开…
http://blog.csdn.net/cywosp/article/details/38965239 1. 概述     在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件.链接文件和设备文件.文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符.程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误.如果此时去打开一个新的文件…
本文转自:http://blog.csdn.net/cywosp/article/details/38965239 作者:cywosp 1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件.链接文件和设备文件.文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符.程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误.如果…
1. 文件描述符(重点) 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件.链接文件和设备文件.文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符.程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误.如果此时去打开一个新的文件,它的文件描述符会是3. 1.1概念介绍 文件描述符的操作(如: open(),creat(),cl…