文件管理相关系统编程

打开文件标识
O_RDONLY:只读方式打开

O_WRONLY:只写方式打开

O_RDWR:可读写方式打开

打开文件操作副标识
O_CREAT:若路径中文件不存在则创建,使用Open函数时需同时指定文件权限

O_EXCL:若与O_CREAT连用,检查文件是否已经存在,若不存在则建立文件存在则返回错误,这使创建和测试成为一个原子操作

O_APPEND:读写文件从文件尾部开始移动,所有写入数据都加入文件尾部

O_TRUNC:若文件存在并且可以写入,此标识会将源文件内容清空

O_NONBLOCK:如果打开或创建文件是管道文件,或一个块特殊文件,一个字符特殊文件,该表示代表后续操作非阻塞

文件权限标志
S_IRUSR:用户读权限

S_IWUSR:用户写权限

S_IXUSR:用户执行权限

S_IRWX:用户读写执行权限

S_IRGRP:用户组读权限

S_IWGRP:用户组写权限

S_IXGRP:用户组执行权限

S_IRWXG:用户组读写执行权限

S_IROTH:其他用户读权限

S_IWOTH:其他用户写权限

S_IXOTH:其他用户执行权限

S_IRWXO:其他用户读写执行权限

S_ISUID:SUID权限

S_ISGID:SGID权限

文件同步输入标识
O_SYNC:每次write都等到物理I/O完成才返回,包括文件属性更新I/O操作完成

O_DSYNC: 每次write都等到物理I/O完成才返回,不包括文件属性更新I/O操作完成

O_RSYNC:使每一个以文件描述符作为参数的read的参数等待,直到任何对文件同一部分进行的写操作都完成

重要函数

文件操作
open

用于打开或创建文件

Int open(文件路径,标识,权限标识)

文件路径:绝对路径与相对路径均可

标识:文件标识与操作副标识以及文件同步标识的结合结合

权限标识:是使用权限标识,也可用数字法标识

返回值:成功返回文件标识符.出错返回-1

creat

用于创建文件

int creat(文件路径, 权限标识)

返回值:成功返回文件标识符.出错返回-1

说明:以只写方式打开文件

close

用于关闭文件,当一个进程终止时,内核会自动关闭它打开的所有文件

int close(int fd)

返回值:成功返回0.出错返回-1

sleek

用于设置文件偏移量

off_tsleek(int fd,off_t offset,int whence)

若whence= SEEK_SET,设置当前偏移量为距离文件开始处offset字节

若whence= SEEK_CUR,设置当前偏移量为距离文件当前偏移处offset字节(offset可为正负)

若whence= SEEK_END,设置当前偏移量为文件长度加offset(offset可为正负)

返回值:成功返回新的文件偏移量,失败返回-1 (对于管道文件不能设置偏移文件,因此返回-1)

dup|dup2

复制一个现存的文件描述符

Int dup(intfd)

Int dup(intfd1,int fd2)

Fd1为复制的文件描述符源

Fd2为复制的文件描述符目的地

如果fd2文件为关闭应先关闭

返回值:成功返回新的文件描述符,失败返回-1

举例:

#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <stdio.h>
int main() {
    int f = open("output", O_CREAT | O_TRUNC | O_RDWR, 0644);
    if (f == -1) {
        perror("文件创建失败!");
        return 0;
    }
    int newf = dup(f);
    write(f, "往文件里写输入!\n", 25);
    write(newf, "使用新的文件描述符!\n", 31);
    int oldInput = dup(STDOUT_FILENO);
    puts("使用标准输出到控制台");
    dup2(f, STDOUT_FILENO);
    puts("使用标准输出到文件");
    dup2(oldInput, STDOUT_FILENO);
    puts("还原标准输出到控制台");
    return 0;
}

控制台输出:

使用标准输出到控制台

还原标准输出到控制台

output文件内容:

往文件里写输入!

使用新的文件描述符!

使用标准输出到文件

fcnt1

改变已打开文件的文件性质

int fcntl (int fd, int cmd, ...);

主要功能:

1: 复制一个现有描述符:Cmd=F_DUPFD

2:获取/设置文件描述符标注cmd= F_GETFD或F_SETFD

3:获取/设置文件状态标注 cmd=F_GETFL或F_SETFL

4:获取/设置异步I/O所有权 cmd= F_GETOWN或F_SETOWN

5:获取/设置记录锁 cmd= F_GETLK或F_SETLK

Fcntl的文件状态标识

O_RDONLY

O_WRONLY

O_RDWR

O_APPENT

O_NONBLOCK

O_SYNC

O_DSYNC

O_FSYNC

说明:

1:由于 O_RDONLY,O_WRONLY,O_RDWR 只能同时存在一个,因此需要用O_ACCMODE取得访问屏蔽位

2:F_SETFL只能设置O_APPENT,O_NONBLOCK,O_SYNC,O_DSYNC,O_FSYNC

举例:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/19069.html