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

2019-07-13 06:16发布

文章目录

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 int main(int argc, char *argv[]) { FILE *fp; if ((fp = fopen(“test.txt”, “r+)) == NULL) { printf(“fopen error ”); 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 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 #include #include int main(int argc, char *argv[]) { FILE *fp; if ((fp = fopen(“test.txt”, “r+)) == NULL) { printf(“fopen: %s ”, strerror(errno)); return -1; }
fopen: No such file or directory

4,关闭流fclose()

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