zoukankan      html  css  js  c++  java
  • linux文件编程----系统调用

    linux中文件编程可以使用两种方法:

    1)、linux系统调用

    2)、C语言库函数

    前者依赖于linux系统,后者与操作系统是独立的。

    在 linux系统中,所有打开的文件也对应一个数字,这个数字由系统来分配,我们称之为:文件描述符

    1、创建文件:

    int creat(const char *filename,mode_t mode)
    filename:要创建的文件名(包含路径、缺省为当前路径)
    mode:创建模式   //可读可写可执行

    常见创建模式:

    宏表示     数字
    S_IRUSR 4   可读 S_IWUSR 2   可写 S_IXUSR 1   可执行 S_IRWXU 7   可读、写、执行

    无任何权限:0

    所属头文件:

    #include <sys/types.h> 
    #include <sys/stat.h> 
    #include <fcntl.h> 

    返回值:

    Success:文件描述符            Fail: -1
    #include <stdio.h> 
    #include <stdlib.h> 
    
    #include <sys/types.h> 
    #include <sys/stat.h> 
    #include <fcntl.h> 
    
    void  create_file(char *filename){ 
    
    /*创建的文件具有什么样的属性?*/    
        if(creat(filename,0755)<0){ 
            printf("create file %s failure!
    ",filename); 
            exit(EXIT_FAILURE); 
        }else{ 
            printf("create file %s success!
    ",filename); 
        } 
    } 
    
    int main(int argc,char *argv[]){ 
        int i; 
        if(argc<2){ 
            perror("you haven't input the filename,please try again!
    "); 
            exit(EXIT_FAILURE); 
        } 
    
        for(i=1;i<argc;i++){ 
            create_file(argv[i]);    
        } 
    
        exit(EXIT_SUCCESS); 
    }

    2.打开文件

    int open(const char *pathname,int flags)
    int open(const char *pathname,int flags,mode_t mode)

    所属头文件

    <sys/types.h>    <sys/stat.h>   <fcntl.h> 

    返回值

    fd:文件描述符            Fail: -1

     参数说明:

    Pathname:要打开的文件名(含路径,缺省为当前路径)
    Flags:文件打开的标志: O_APPEND:以追加方式打开文件 O_CREAT:当文件不存在,创建一个新文件
    o_RDONLY:只读方式打开
    O_WRONLY:只写方式打开
    O_RDWR:读写方式打开
    O_NOBLOCK:非阻塞方式打开。
    Mode:一定是在flags中使用了O_CREAT标志,mode记录待创建的文件的访问权限
    int open(const char *pathname,int flags,mode_t mode)
    #include <stdio.h>
    #include <stdlib.h>
    
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    
    int main(int argc ,char *argv[]){
        int fd;
        if(argc<2){
            puts("please input the open file pathname!
    ");
            exit(1);
        }
        
        //如果flag参数里有O_CREAT表示,该文件如果不存在,系统则会创建该文件,该文件的权限由第三个参数决定,此处为0755
        //如果flah参数里没有O_CREAT参数,则第三个参数不起作用.此时,如果要打开的文件不存在,则会报错.
        //所以fd=open(argv[1],O_RDWR),仅仅只是打开指定文件
        if((fd=open(argv[1],O_CREAT|O_RDWR,0755))<0){
            perror("open file failure!
    ");
            exit(1);
        }else{
            printf("open file %d  success!
    ",fd);
    
        }
        close(fd);
        exit(0);
        
    }

    3.关闭文件

    Int close(int fd)    //关闭一个打开的文件

    所属文件头:

    <unistd.h>

    返回值:

    Success:0 fail:-1

    参数说明:

    Fd:待关闭的文件描述符  //从系统open调用返回来的

    4.读文件

    size_t  read(int fd,void *buf,size_t count)  //从一个打开的文件中读取数据

    头文件

    <unistd.h>

    返回值:

    cnt:返回读取的字节数   fail:-1

    参数说明:

    Fd:要读取数据的文件的描述符
    Count:希望读取的字节数
    Buf:读取来的数据存到buf指向的空间

    5.写文件

    size_t write(int fd,void *buf,size_t count)

    头文件

    <unistd.h>

    返回值:

    返回写入到文件的字节数。 Fail:-1

    参数说明:

    Fd:要写入数据的文件的描述符
    Buf:要写入的数据存放位置
    Count:希望写入的字节数

    6.文件定位

    Off_t lseek(int fd,off_t offset,int whence)    //重新定位读写位置
    将文件读写指针相对whence移动offset个字节。

    头文件

    <sys/types.h>  <unistd.h>

    返回值:

    Success: 返回移动后的文件指针距离文件头的位置
    Fail:-1

    参数说明:

    Fd:需要重新定位的文件的描述符
    Offset:在其实位置基础上设置的偏移量(向前移动时是负值、向后移动是正值)
    Whence:设置文件偏移指针开始移动的位置
            SEEK_SET:开始偏移的起始位置为文件头
            SEEK_CUR:开始偏移的起始位置为目前的位置
            SEEK_END:开始偏移的起始位置为文件尾//计算文件长度

    计算文件长度:

    lseek(fd,0,SEEK_END)

    7.访问判断:

    int access(const char *pathname,int mode)

    参数说明:

    pathname:文件名称
    mode:要判断的访问权限。可以有以下几个值:
    R_OK:文件可读
    W_OK:文件可写
    X_OK:文件可执行
    F_OK:文件存在

    返回值:

    当我们测试成功时,函数返回0,否则如果一个条件不符时,返回-1

    8.文件拷贝

    Int dup(int oldfd);
    Int dup2(int oldfd,int newfd);

    所属头文件:

    <unistd.h>

    返回值:

    Success:返回新的文件描述符  fail:-1
  • 相关阅读:
    WCF中神秘的“8731"端口和“Design_Time_Addresses”
    wcf分布式构架集群案例解决方案
    asp.net odjectdatasource的用法
    ClientBase<T>中对ChannelFactory<T>的缓存机制
    asp.net datatable中行的复制
    c#连接各种数据库的方法
    wcf系列学习5天速成——事务的使用
    Atitit 软件设计中的各种图纸 uml 之道 1. 常见设计成果与图纸 2 1.1. 总图 2 1.2. ui原型图与html 2 1.3. 业务逻辑 伪代码 各种uml图 2 1.4. 总体
    Atitit 综合原则 软件与项目开发中的理念信念 目录 1.1. 建议组合使用扬长避短 1 1.2. 常见数据库 mysql oracle mssql mongodb postgre sqlit
    Atitit it理论不可能三角“:“安全方便廉价 目录 1. 不可能三角 1 2. 三元悖论 1 2.1. 培恩洛兹三角形 2 2.2. 彭罗斯三角(Penrose triangle) 2 2.
  • 原文地址:https://www.cnblogs.com/Caden-liu8888/p/7706167.html
Copyright © 2011-2022 走看看