linux系统下的fopen函数
程序员文章站
2024-01-21 21:04:52
...
在文件 I/O
中,使用
open()
系统调用打开或创建文件,而在标准
I/O
中,我们将使用库函数
fopen()
打开或创建文件,
fopen()函数原型如下所示:
#include <stdio.h>
FILE *fopen(const char *path, const char *mode);
使用该函数需要包含头文件 stdio.h
。
函数参数和返回值含义如下:
path:
参数
path
指向文件路径,可以是绝对路径、也可以是相对路径。
mode:
参数
mode
指定了对该文件的读写权限,是一个字符串,稍后介绍。
返回值:调用成功返回一个指向
FILE
类型对象的指针(
FILE *
),该指针与打开或创建的文件相关联,后续的标准 I/O
操作将围绕
FILE
指针进行。如果失败则返回
NULL
,并设置
errno
以指示错误原因。参数 mode
字符串类型,可取值为如下值之一:
mode |
说明 |
对应于open()函数的 flags 参数取值 |
r |
以只读方式打开文件。 |
O_RDONLY |
r+ |
以可读、可写方式打开文件。 |
O_RDWR |
w |
以只写方式打开文件,如果参数 path 指定的文件存在,将文件长度截断为 0;如果指定文件不存在则创建该文件。 |
O_WRONLY | O_CREAT | O_TRUNC |
w+ |
以可读、可写方式打开文件,如果参数 path 指定的文件存在,将文件长度截断为 0;如果指定文件不存在则创建该文件。 |
O_RDWR | O_CREAT | O_TRUNC |
a |
以只写方式打开文件,打开以进行追加内容(在文件末尾写入),如果文件不存在则创建该文件。 |
O_WRONLY | O_CREAT |O_APPEND |
a+ |
以可读、可写方式打开文件,以追加方式写入(在文件末尾写入),如果文件不存在则创建该文件。 |
O_RDWR | O_CREAT | O_APPEND |
由 fopen()
函数原型可知,
fopen()
只有两个参数
path
和
mode
,不同于
open()
系统调用,它并没有任何一个参数来指定新建文件的权限。当参数 mode
取值为
"w"
、
"w+"
、
"a"
、
"a+"
之一时,如果参数
path
指定的文件不存在,则会创建该文件,那么新的文件的权限是如何确定的呢?
虽然调用
fopen()
函数新建文件时无法手动指定文件的权限,但却有一个默认值:
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH (0666)
使用示例
使用只读方式打开文件: fopen(path, "r");
使用可读、可写方式打开文件: fopen(path, "r+");
使用只写方式打开文件,并将文件长度截断为 0
,如果文件不存在则创建该文件:
fopen(path, "w");
fclose()关闭文件
调用 fclose()
库函数可以关闭一个由
fopen()
打开的文件,其函数原型如下所示:
#include <stdio.h>
int fclose(FILE *stream);
参数 stream
为
FILE
类型指针,调用成功返回
0
;失败将返回
EOF
(也就是
-1
),并且会设置
errno
来指示错误原因。
推荐阅读