嵌入式Linux标准IO,fopen(),fclose(),错误信息处理errno,perror(),strerror()

1,打开流fopen()

下列函数可用于打开一个标准I/O流:
FILE *fopen (const char *path, const char *mode);

  1. 成功时返回流指针; 出错时返回NULL

mode参数

参数 含义
"r"或"rb" 以只读方式打开文件, 文件必须存在。
"r+"或"r+b" 以读写方式打开文件, 文件必须存在。
"w"或"wb" 以只写方式打开文件, 若文件存在则文件长度清为0。 若文件 不存在则创建。
"w+"或"w+b" 以读写方式打开文件, 其他同”w”。
"a"或"ab" 以只写方式打开文件, 若文件不存在则创建; 向文件写入的数 据被追加到文件末尾。
"a+"或"a+b" 以读写方式打开文件。 其他同”a”

当给定”b”参数时, 表示以二进制方式打开文件, 但Linux下忽略该参数

fopen示例

#include <stdio.h>
int main(int argc, char *argv[])
{
	FILE *fp;
	if ((fp = fopen(“test.txt”, “r+)) == NULL) 
	{
		printf(“fopen error\n”);
		return -1;
	}
	return 0;
}

2,fopen()新建文件权限

  1. fopen() 创建的文件访问权限是0666(rw-rw-rw-)
  2. Linux系统中umask设定会影响文件的访问权限, 其规则为(0666 & ~umask)
  3. 用户可以通过umask函数修改相关设定

3,处理错误信息errno,perror(),strerror()

extern int errno;
void perror(const char *s);
char *strerror(int errno);

  1. errno 存放错误号
  2. perror先输出字符串s, 再输出错误号对应的错误信息
  3. strerror根据错误号返回对应的错误信息

处理错误信息 示例一perror()

#include <stdio.h>
int main(int argc, char *argv[])
{
	FILE *fp;
	if ((fp = fopen(“test.txt”, “r+)) == NULL) {
		perror(“fopen”);
		return -1;
	} 

fopen: No such file or directory

处理错误信息 示例二strerror(),errno

#include <stdio.h>
#include <string.h>
#include <errno.h>
int main(int argc, char *argv[])
{
	FILE *fp;
	if ((fp = fopen(“test.txt”, “r+)) == NULL) {
		printf(“fopen: %s\n”, strerror(errno));
		return -1;
} 

fopen: No such file or directory

4,关闭流fclose()

int fclose(FILE *stream);

  1. fclose()调用成功返回0, 失败返回EOF, 并设置errno
  2. 流关闭时自动刷新缓冲中的数据并释放缓冲区
  3. 当一个程序正常终止时, 所有打开的流都会被关闭。
  4. 流一旦关闭后就不能执行任何操作

猜你喜欢

转载自blog.csdn.net/m0_37542524/article/details/83717927