linux学习笔记(5):dup,dup2,fcntl

原创 2016年06月01日 08:33:48
代码先上:
#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<stdlib.h>
/*自定义错误处理函数*/
void my_err(const char * err_string,int line)//错误处理函数学习笔记三中有记录
{
    fprintf(stderr,"line:%d",line);
    perror(err_string);
    exit(1);
}
int main()
{
    int ret;
    int access_mode;
    int fd;
    if((fd=open("example_64",O_CREAT|O_TRUNC|O_RDWR,S_IRWXU))==-1){  //以读写打开example_64文件,如果不存在则创建,如果存在则把内容清空,用户
        my_err("open",__LINE__);                                     //权限可读可写可执行,打开失败则调用错误处理函数
     }
     /*设置文件打开方式*/
    if((ret=fcntl(fd,F_SETFL,O_APPEND))<0){                          
        my_err("fcntl",__LINE__);
     }
    /*获取文件打开方式*/
     if(ret=fcntl(fd,FGETFL,0))<0){
         my_err("fcntl",__LINE__);
     }
     access_mode=ret&O_ACCMODE;
     if(access_mode==O_RDONLY){
        printf("example_64 access mode: read only");
      }else if(access_mode == O_WRONLY){
        printf("example_64 access mode: write only");
      }
      if(ret&O_APPEND){
          printf(",append");
      }
      if(ret & O_SYNC){
         printf(",sync");
      }
      printf("\n");
      return 0;
}

ret=fcntl(fd,F_SETFL,O_APPEND) shell  man fcntl下查看函数: Set  the  file status flags to the value specified by arg.  File access mode (O_RDONLY, O_WRONLY, O_RDWR) and file creation flags (i.e.,  O_CREAT,  O_EXCL, O_NOCTTY, O_TRUNC) in arg are ignored.On Linux this command can change  only  the  O_APPEND,  O_ASYNC O_DIRECT,  O_NOATIME,  and O_NONBLOCK flags.  It is not possible to change the O_DSYNC and O_SYNC flags; see BUGS, below.

设置被参数arg指定的文件状态标志值。在liux下这个命令只可以改变O_APPEND,  O_ASYNC O_DIRECT,  O_NOATIME,   O_NONBLOCK、标志,其它的标志不可以改变

ret=fcntl(fd,FGETFL,0) Get the file access mode and  the  file  status  flags;  arg  is gnored.返回值当输入参数为F_GETFL  Value of
 file status flags.返回值为文件状态标志。
access_mode=ret&O_ACCMODE;O_ACCMODE的值为三,这句是为了获得ret后两位的值,然后判断文件的打开方式
版权声明:欢迎交流,共同进步!

linux之dup和dup2函数解析

本文转载,原文地址:http://blog.csdn.net/fulinus/article/details/9669177#comments1、文件描述符在内核中数据结构  在具体说dup/dup2...
  • silent123go
  • silent123go
  • 2017年05月03日 11:27
  • 1822

dup/dup2输出重定向

有时我们希望把标准输入重定向到一个文件,或者把标准输出重定向到一个网络连接。 dup()与dup2()能对输入文件描述符进行重定向。 int dup(int oldfd); int dup2(int ...
  • fucangzxx
  • fucangzxx
  • 2016年07月28日 17:11
  • 2078

使用dup和dup2重定向和还原

使用dup和dup2重定向和还原 源于开发一个应用将数据写的设备节点中,但是设备节点具有可变性,所以不在写死,而是先确定好,打开fd再将内容写进去,最终写入fd中的是一个开源程序,没有办法传递fd,不...
  • kangear
  • kangear
  • 2014年04月19日 11:12
  • 11176

linux学习之十八---管道pipe&dup&dup2

1.管道的用法: 进程在使用fork函数创建子进程前先创建一个管道,该管道用于在父子进程间通信,然后创建子进程,之后父进程关闭管道的读端,子进程关闭管道的写端。父进程负责向管道写数据而子进程负责读数...
  • lanzhihui_10086
  • lanzhihui_10086
  • 2014年11月10日 15:25
  • 1521

linux dup函数源码剖析

这是我新的专栏的第一篇,其实我这种水平的人还写专栏,实在是没有自知之明,夜郎自大。这个专栏只是希望起到一个抛砖引玉的作用,欢迎大家对我的文章多提宝贵的意见。 好了,先说说我为什么要写这样一个专栏,其实...
  • u012927281
  • u012927281
  • 2016年06月19日 10:07
  • 1368

dup和dup2的使用方法

/*本文通过标准输出的重定向和恢复的过程来解释dup和dup2的使用方法*/ #include #include #include //STDIN_FILENO标准输入描述符(0) //STD...
  • lurendetiankong
  • lurendetiankong
  • 2016年12月06日 15:16
  • 1425

重定向编程 dup和dup2函数

重定向编程 dup和dup2函数    函数dup和dup2提供了复制文件描述符的功能。他们通常用于stdin,stdout或进程的stderr的重定向。一般来说,普通输出函数(如:printf),...
  • u010006102
  • u010006102
  • 2014年09月29日 11:53
  • 1986

文件描述符和dup dup2 fcntl

一张表图:这张图描述的是进程级别的文件描述符和系统级别的打开文件表和系统级别的文件系统索引结点的连系关系。由图可以知道: 每个进程维护的文件描述符表文件描述符从零开始, 进程间的文件描述符编号会重复;...
  • danneel
  • danneel
  • 2017年04月10日 01:27
  • 454

Linux:dup/dup2 文件描述符重定向函数(有图有代码有真相!!!)

一、dup/dup2 有时我们希望把标准输入重定向到一个文件,或者把标准输出重定向到一个网络连接。系统调用dup和dup2能够复制文件描述符。dup返回新的文件文件描述符(没有用的文件描述符最小的编号...
  • Sharp_UP
  • Sharp_UP
  • 2017年06月07日 16:44
  • 424

【APUE学习笔记】dup和dup2用法

在了解dup用法之前,需要对linux的文件节点有一个认识。 内核有3个数据结构来表示进程打开的文件,dup是系统提供的一个API可以直接操作这三个数据结构之间的关系。 (1)每个进程在进程表当中都有...
  • tuantuanls
  • tuantuanls
  • 2014年09月09日 17:40
  • 592
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux学习笔记(5):dup,dup2,fcntl
举报原因:
原因补充:

(最多只允许输入30个字)