文件操作
底层文件操作(关于文件的系统调用)
open
(1) 用法
main 2 open
(2) 返回值
成功:文件描述符
失败:-1
(3) 打开方式
O_RDONLY 只读
O_WRONLY 只写
O_RDWR 读写
O_CREAT 如果文件不存在,则创建该文件,并使用第3个
参数设置权限,如果文件存在 ,则只打开文件
O_EXCL 如果同时使用O_CREAT而且该文件又已经存在
时,则返回错误, 用途:以防止多个进程同时创建
O_APPEND 尾部追加方式(打开后,文件指针指向文件的末尾)
O_TRUNC 若文件存在,则长度被截为0,属性不变
example: open("/dev/hello", O_RDONLY|O_CREAT|O_EXCL, 0777)
(4) 参数3 (设置权限)
当使用O_CREAT时,使用参数3
S_I(R/W/X)(USR/GRP/OTH)
例
:
S_IRUSR | S_IWUSR 文件的所有者对该文件可读可写
(八进制表示法)0600 文件的所有者对该文件可读可写
注意
:
返回的文件描述符是该进程未打开的最小的文件描述符
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#include <stdio.h>
#define FILE_RW_LEN 1024
int main(void){
int fd = 0;
int count = 0;
char buffer[FILE_RW_LEN]="I 'm Martin.";
fd = open("./martin.txt", O_CREAT|O_RDWR|O_APPEND|O_TRUNC, S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH);
//fd = open("./martin.txt", O_CREAT|O_EXCL|O_RDWR, S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH);
if(fd < 0){
printf("open file martin.txt failed. reason: %s\n", strerror(errno));
exit(-1);
}
count = write(fd, buffer, strlen(buffer));
printf("written: %d bytes.\n", count);
close(fd);
}
具体
权限
!gcc 能把你之前的编译再执行一遍
会覆盖, 需要把这个加上:
O_APPEND 尾部追加方式(打开后,文件指针指向文件的末尾)
结语:
时间: 2020-07-30