文件的打开与文件的关闭(系统调用函数)
标准c中: fopen(
3), fclose(
3)
系统调用:open(
2),close(
2)
open(
2):
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(
const char *pathname,
int flags, ...);
功能:打开一个文件,有可能创建一个文件
参数:
pathname:指定要打开文件的名字
flags:(
3选
1)
O_RDONLY, 只读
O_WRONLY, 只写
O_RDWR.可读可写
另外可以按位或
0个或多个创建标记和状态标记
O_CREAT:如果文件不存在则创建文件,有这个标记时需要有第
3个参数,第三个参数mode指定了新文件的权限。新文件的权限是(mode & ~umask)
O_EXCL:如果和o_creat在flags中被一起指定,文件存在,报错
O_NOCTTY。
O_TRUNC:打开的文件存在,并且是一个普通文件,有写的权限,那么文件清空
O_APPEND:追加模式打开文件,文件的读写位置被定位在文件的末尾
...:可变参数,可变参数的类型和个数取决于可变参数前面的那个参数
返回值:返回一个新的文件描述符
close(
2):
#include <unistd.h>
int close(
int fd);
功能:关闭一个文件描述符
参数:fd:指定要关闭的文件描述符
返回值:
-
1: 错误 errno被设置
0: 成功
步骤:
1、定义文件标识符变量
2、打开文件(打开方式,权限问题)
3、判断文件是否打开
4、关闭文件
5、在关闭文件前填写操作
举例:
以读写的方式,文件不存在,创建文件,权限为
0644,文件存在,报错,文件已存在(rw_file.c)
程序:
#include <stdio.h>
#include <p_file.h>
int main(
int argc,
char *argv[]) {
int fd;
int flags = O_RDWR | O_CREAT | O_EXCL;
fd = open(argv[
1], flags,
0644);
if(fd == -
1) {
perror(
"open");
return -
1;
}
printf(
"file open success");
close(fd);
return 0;
}