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后两位的值,然后判断文件的打开方式

版权声明:欢迎交流,共同进步!

相关文章推荐

UNIX环境高级编程学习笔记(四)不调用fcntl函数实现dup2的功能

不使用fcntl来实现dup2的功能

Unix环境编程 如何实现dup2函数,不允许调用fcntl?

这是unix编程环境第三章的一个题目,前段时间翻了下,发现这个题目还有点小意思,而且网上也没什么全面的答案。 先补充几个概念:   文件描述符:内核(kernel)利用文件描述符(file de...
  • xiaotjx
  • xiaotjx
  • 2012年08月31日 16:59
  • 246

linux系统编程-学习笔记3-dup/dup2/stat/lstat/fstat

/*文件重定向:用于文件共享*/ int dup(int oldfd); int newfd = dup(oldfd) 把文件描述符newfd重定向到文件描述符oldfd指向的文件,之后,可以通过ne...

apue读书笔记【九】:复制一个现存的文件描述符 dup dup2 fcntl

一、 函数名称:opendir 函数原型:DIR * opendir(const char* path);   函数功能:打开一个目录,在失败的时候返回NULL(如果path对应的是文件...

Linux Programmer's Manual DUP(2)

DUP(2)                     Linux Programmer's Manual                    DUP(2) NAME        dup, du...
  • yuyin86
  • yuyin86
  • 2011年08月10日 11:21
  • 463

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

在了解dup用法之前,需要对linux的文件节点有一个认识。 内核有3个数据结构来表示进程打开的文件,dup是系统提供的一个API可以直接操作这三个数据结构之间的关系。 (1)每个进程在进程表当中都有...

笔记 os.dup2

dup和dup2也是两个非常有用的调用,它们的作用都是用来复制一个文件的描述符。它们经常用来重定向进程的stdin、stdout和stderr。这两个函数的原形如下:   C代码   ...

Linux下面dup/dup2两个函数的学习笔记

1. 文件描述符在内核中数据结构      在具体说dup/dup2之前, 我认为有必要先了解一下文件描述符在内核中的形态。  一个进程在此存在期间,会有一些文件被打开,从而会返回一些文件描述符,从s...
  • qt4422
  • qt4422
  • 2011年07月13日 20:31
  • 525

Linux dup2详解

原型: int dup2()in

文件描述符和dup dup2 fcntl

一张表图:这张图描述的是进程级别的文件描述符和系统级别的打开文件表和系统级别的文件系统索引结点的连系关系。由图可以知道: 每个进程维护的文件描述符表文件描述符从零开始, 进程间的文件描述符编号会重复;...
  • danneel
  • danneel
  • 2017年04月10日 01:27
  • 359
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux学习笔记(5):dup,dup2,fcntl
举报原因:
原因补充:

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