Linux学习笔记之--低级(底层)文件库编程

来源:互联网 发布:辣椒水喷雾剂淘宝有吗 编辑:程序博客网 时间:2024/06/15 11:35
3:低级文件编程库(底层文件编程库)
    3.1:    文件的打开与创建
            #include <fcntl.h>
            int open(const char *filename, int oflag, .../*[mode_t mode]*/)
            本函数共有三个参数:要打开或创建文件的路径名;oflag指定打开或创建
            的方式;mode是可选参数决定新文件的模式,仅当创建文件时有效
            调用成功时为filename创建一个描述符并返回,否则返回-1.
            
            oflag的取值:  
                   
            a:读写方式:         
            O_RDONLY       以只读方式打开文件
            O_WRONLY       以只写方式打开文件
            O_RDWR         以读写方式打开文件
         
            b:常规方式:    
            O_APPEND       追加方式打开文件,写操作时先移动到文件末尾再添加数据     
            O_CREAT        文件不存在时创建文件,创建的模式由open第三个参数决定
            O_EXCL         与O_CREAT一起使用,当文件不存在时则创建,否则open调用失败
            O_NDELAY       非阻塞标志,在该文件上的读写操作立刻返回无须等待
            O_NONBLOCK     同上
            O_TRUNC        加上此标志文件将被清空
           
            c: 同步方式
            O_DSYNC        任何写操作都导致进程阻塞,直到物理的写动作完成
            O_SYNC         包含O_DSYNC含义,可更新文件各个属性
         
            O_RSYNC--
                    |      
            O_DSYNC--
            
            O_RSYNC--
                    | 
            O_SYNC---
            O_RSYNC不能单独使用,如果O_DSYNC和O_SYNC同时被设置,只有后者有效
            
            例1:只读方式打开/etc/passwd
            int fno;
            if ((fno = open("/etc/passwd", O_RDONLY)) < 0)
            return ;
            
            例2:以0755创建文件/tmp/t1
            int fno;
            if ((fno = open("/tmp/t1", O_WRONLY|O_CREAT|O_EXCL, 0755)) < 0)
               return ;
    3.2:    文件的关闭与删除
            #include <unisted.h>
            int close(int fildes)
            int unlink(char *path)
    3.3:    文件读         
            函数read从打开的文件中读取数据
            #include <unistd.h>
            ssize_t read(int filedes, void *buff, size_t nbytes);
            从filedes中读取nbytes个字节数据到buff,如果成功返回读到的字节数
            (不一定等于nbytes)如果文件结尾或nbytes=0,返回0,错误返回-1.
    3.4:    文件写
            #include <unistd.h>
            ssize_t write(int filedes, const void *buff, size_t nbytes)
            将buff所指内存的数据向filedes所指的文件中写入nbytes个字节返回成功写入字节数
    3.5:    文件的定位
            #include <unistd.h>
            off_t lseek(int fildes, off_t offset, int whence);
            改变文件流的访问位置,成功返回当前位置距文件位移,否则-1.
    3.6:    文件缓冲
            #include <unistd.h>
            int fsync(int filedes);         
            将写入filedes中的数据真正写入磁盘中成功返回0
    3.7:    复制文件描述符
            #include <unistd.h>
            int dup(int fildes)
            int dup2(int fildes, int fildes2)
            dup将fildes复制到当前未使用的最小可用描述符中
            dup2将fildes复制到fildes2中,返回新描述符        
    3.8:    文件控制函数fcntl
            #include <fcntl.h>
            int fcntl(int fildes, int cmd);
            int fcntl(int fildes, int cmd, int arg);
            int fcntl(int fildes, int cmd, struct flock * arg);
            fcntl对fildes执行各种控制命令,cmd确定具体命令以及是否需要第三个参数
            cmd可选择的命令如下:
         
            a:F_DUPFD   返回大于等于第三个参数的最小可用文件描述符
            fcntl(fildes, F_DUPFD, 0);     
                
            b:F_GETFD   返回fildes的标志
               
            c:F_SETFD   以参数arg设置fildes
            
            d:F_GETOWN  获取SIGIO或SIGURG的ID
            
            e:F_SETDOW  以arg设置SIGIO或SIGURG的ID
           
            g:F_GETLK, F_SETLK, F_SETLKW获得或设置记录锁
            
            h: F_GETFL   返回fildes的打开方式
            
            i: F_SETFL 以参数arg设置文件的打开方式
        
    3.9:    文件锁        
            int fcntl(int fildes, int cmd, struct flock *arg);
            flock结构体用于描述文件锁的信息
            struct flock
            {
               short l_type;       锁类型:F_RDLCK(读),F_WRLCK(写),F_UNLCK(释放)
               short l_whence;     锁区域开始的位置:SEEK_SET,SEEK_CUR,SEEK_END
               logn  l_start;      锁区域开始位置的偏移量与l_whence共同确定锁区域
               long  l_len;        锁区域的长度,0表示锁至文件末尾
               short l_pid;        拥有锁的进程ID号
            };
            fcntl专用于锁操作时,参数cmd的三种取值.
            a: F_GETLK   返回fildes对应文件中指定区域的文件锁信息,成功返回非负数否则-1
            b: F_SETLK   设置锁
            c: F_SETLKW  F_SETLK的阻塞版本
0 0
原创粉丝点击