zoukankan      html  css  js  c++  java
  • LINUX打开文件

    基于文件描述符的文件操作(非缓冲)

    1、文件描述符
    内核为每个进程维护一个已打开文件的记录表,文件描述符是一个较小的正整数(0—1023),它代表记录表的一项,通过文件描述符和一组基于文件描述符的文件操作函数,就可以实现对文件的读、写、创建、删除等操作。常用基于文件描述符的函数有open(打开)、creat(创建)、close(关闭)read(读取)write(写入)、ftruncate(改变文件大小)、lseek(定位)、fsync(同步)、fstat(获取文件状态)、fchmod(权限)、flock(加锁)、fcntl(控制文件属性)、dup(复制)、dup2、select和ioctl。基于文件描述符的文件操作并非ANSI C的函数,是LINUX独有的东西。

    如果不清楚某个函数的具体实现形式,可以通过下面的方式查询
    man  函数名  查看该函数的帮助
    2、打开、创建和关闭文件

    open和creat都能打开和创建函数,原型为

    #include <sys/types.h>      //头文件
    #include <sys/stat.h>
    #include <fcntl.h>
    int open(const char *pathname, int flags);                 //文件名  打开方式
    int open(const char *pathname, int flags, mode_t mode);    //文件名  打开方式  权限,open()函数出错时返回-1
    int creat(const char *pathname, mode_t mode);              //文件名  权限   //现在已经不常用了(因为有上面的函数)
    creat函数等价于→open(pathname,O_CREAT|O_TRUNC|O_WRONLY,mode);

    flags和mode都是一组掩码的合成值,flags表示打开或创建的方式,必须加上打开方式,mode表示文件的访问权限。

    flags
    的可选项有:
    掩码 含义
    O_RDONLY 只读的方式打开
    O_WRONLY 方式打开
    O_RDWR 读写的方式打开
    O_CREAT 如果文件不存在,则创建文件
    O_EXCL 仅与O_CREAT连用,如果文件已存在,则强制open失败
    O_TRUNC 如果文件存在,将文件的长度截至0
    O_APPEND 追加的方式打开文件每次调用write时,文件指针自动先移到文件尾,用于多进程写同一个文件的情况。
    O_NONBLOCK 非阻塞方式打开,无论有无数据读取或等待,都会立即返回进程之中。
    O_NODELAY 非阻塞方式打开
    O_SYNC 同步打开文件,只有在数据被真正写入物理设备设备后才返回

    mode
    的可选项有:
    S_IRWXU 00700 权限,代表该文件所有者具有可读、可写及可执行的权限。
    S_IRUSR 或S_IREAD,00400权限,代表该文件所有者具有可读取的权限。
    S_IWUSR 或S_IWRITE,00200 权限,代表该文件所有者具有可写入的权限。
    S_IXUSR 或S_IEXEC,00100 权限,代表该文件所有者具有可执行的权限。
    S_IRWXG 00070权限,代表该文件用户组具有可读、可写及可执行的权限。
    S_IRGRP 00040 权限,代表该文件用户组具有可读的权限。
    S_IWGRP 00020权限,代表该文件用户组具有可写入的权限。
    S_IXGRP 00010 权限,代表该文件用户组具有可执行的权限。
    S_IRWXO 00007权限,代表其他用户具有可读、可写及可执行的权限。
    S_IROTH 00004 权限,代表其他用户具有可读的权限
    S_IWOTH 00002权限,代表其他用户具有可写入的权限。
    S_IXOTH 00001 权限,代表其他用户具有可执行的权限。
    但是通常采用直接赋数值的形式,如:
    int fd=open(argv[1],O_CREAT|O_RDONLY,0666);
    注意:LINUX中基于文件描述符的 open 函数,对于一个不存在的文件,不能通过 O_WRONLY 的方式打开,必须加上 O_CREAT 选项。

    close用于文件的关闭:
    int close(int fd); //fd表示文件描述词,是先前由open或creat创建文件时的返回值
    文件使用完毕后,应该调用close关闭它,一旦调用close,则该进程对文件所加的锁全都被释放,并且使文件的打开引用计数减1,只有文件的打开引用计数变为0以后,文件才会被真正的关闭

    //o_creat.c
    #include<stdio.h>
    #include<sys/types.h>
    #include<sys/stat.h>
    #include<fcntl.h>
    #include<unistd.h>
    int main(int argc,char ** argv)
    {
            int fd = open(argv[1],O_CREAT|O_RDONLY,0666);
            printf("ret = %d ",ret);
            close(fd);
            return 0;
    }

    //(创建文件默认减去掩码0002)

    open 函数中的fiags (O_RDWR|O_CREAT|O_EXCL)表示在创建文件时不确定系统有没有人创建过这个文件,就加上O_EXCL,表示如果系统存在相应文件就强制失败


  • 相关阅读:
    Zend Framework 入门(2)—多国语言支持
    Zend Framework 入门(1)—快速上手
    国外主流PHP框架比较
    PHP经验集锦
    PHP的GD库函数大全
    最好最实用的PHP二次开发教程
    我的ECshop二次开发从零开始
    Java中实现复制文件或文件夹
    matlab中freqz的用法以及多项式的展开
    matlab滤波器的设计
  • 原文地址:https://www.cnblogs.com/meihao1203/p/8420843.html
Copyright © 2011-2022 走看看