美文网首页
系统编程--文件函数

系统编程--文件函数

作者: 魔芋辣椒 | 来源:发表于2020-08-06 11:40 被阅读0次

    一、open

    #include<unistd.h>
    #include<fcntl.h>
    
    int open(char *path,int flags)
    
    int open(char *path,int flags,mode_t mode) //创建文件时使用,mode为0777等权限值
    
    • 常用flag

    O_RDONLY | O_WRONLY|O_RDWR
    O_CREAT | O_APPEND|O_EXCL|O_NOBLOCK|O_TRUNC
    创建文件        追加        是否存在     是否阻塞     文件清空

    • 常见错误
      引入
      #include errno.h
      #include string.h
      后即可用以下变量和函数查看打开错误
    printf(errno);
    strerror(errno);
    

    二、read

      ssize_t read(int fd,void *buf,size_t count)
    

    返回读取的数量,若读完返回0,错误返回-1
    实例

    char buff[1024];
    int fd1=open(argv[1],O_RDONLY);
    int fd2=open(argv[1],O_RDWR |O_CREAT | O_TRUNC,0644);
    
    while((n=read(fd,buff,1024))!=0){
        write(fd,buff,n);
    }
    
    

    三、write

      ssize_t read(int fd,const void *buf,size_t count)
    

    四、perror

    #include <stdio.h>
    
    void perror(const char *s);
    

    五、exit

    #include<stdlib.h>
    
    void exit(int x);
    

    六、fcntl

    读取文件的状态位图
    F_GETFL \\返回位图
    F_SETFL \\返回是否成功
    int flgs=fcntl(fd,F_GETFL)

    int flgs=fcntl(STDIN_FILENO,F_GETFL);
    
    flgs |=O_NONBLOCK;
    
    int ret=fcntl(STDIN_FILENO,F_SETFL,flgs);   \\给0号文件设置非阻塞状态
    

    七、lseek

    //原型 返回类型为矢量偏移值
    //whence 可取SEEK_SET    SEEK_CUR    SEEK_END
     off_t lseek=(int fd,off_t offset,int whence);
    
    //获取文件大小
    int length=lseek(fd,0,SEEK_END);
    
    //拓展文件大小
    lseek(fd,111,SEEK_END);
    write(fd,'\0',1);                             //不写入则会导致文件大小不变
    
    

    八、stat

    查看文件属性

    ////statbuf 为传出指针,传入后执行完,给statbuf赋值
    #include<sys/stat.h>
     int stat(const char *pathname, struct stat *statbuf);
    
    struct stat  buff;
    stat(" ".&buff);
    
    /*
     struct stat {
                   dev_t     st_dev;         / ID of device containing file 
                   ino_t     st_ino;           /Inode number 
                   mode_t    st_mode;         /File type and mode 
                   nlink_t   st_nlink;      / Number of hard links 
                   uid_t     st_uid;          /User ID of owner 
                   gid_t     st_gid;          /Group ID of owner 
                   dev_t     st_rdev;         /Device ID (if special file) 
                   off_t     st_size;        / Total size, in bytes 
                   blksize_t st_blksize;     /Block size for filesystem I/O 
                   blkcnt_t  st_blocks;      / Number of 512B blocks allocated 
    }
    */
    

    九、execlp

    execlp("命令,如ls","同一如ls不可省略","参数,如-l",NULL);
    //NULL为哨兵,不可省略
    

    执行到此后,后面的代码均失效,不执行

    十、dup2

    /重定向,将新的文件描述符指向旧的文件

    dup2(int oldfileno,int newfileno);
    
    //如不想从标准输入读取,想从文件读取
    dup2(oldfno,STDIN_FILENO);
    

    十、ftruncate

    int ftruncate(int fd, off_t length);
    //拓展文件大小
    

    十、unlink

    int unlink(char* filename);
    //删除文件,若文件还在被使用,则先取消链接,等待其使用完后删除
    

    相关文章

      网友评论

          本文标题:系统编程--文件函数

          本文链接:https://www.haomeiwen.com/subject/lrczrktx.html