文件系统操作

Posted kele-dad

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件系统操作相关的知识,希望对你有一定的参考价值。

一、文件操作系统调用

1 /* 创建
2  * 参数:
3  *        @filename:文件名
4  *        @mode:指定新建文件的存取权限,它同 umask 一起决定文件的最终权限(mode & umask),umask 代表了文件在创建时需要去掉的一些存取权限。
5  *                umask 可通过系统调用 umask() 来改变
6  */
7 int creat(const char *filename, mode_t mode);
8 /* 该调用将 umask 设置为 newmask,然后返回旧的 umask,它只影响读、写和执行权限 */
9 int umask(int newmask);
1 /* 文件打开,此函数有两种形式
2  *         pathname 为要打开的文件名(包含路径名称,默认是在当前路径下)
3  *        flags 为文件打开标志
4  *        mode 为文件访问权限
5  */
6 int open(const char *pathname, int flags);
7 int open(const char *pathname, int flags, mode_t mode);

  flags 文件打开标志:

  技术分享图片

  mode 文件访问标志:

  技术分享图片

 

1 /* 文件读写
2  *         buff 为指向缓冲区的指针
3  *        length 为缓冲区的大小(以字节为单位)
4  */
5 int read(int fd, const void *buf, size_t length);    //实现从文件描述符 fd 所指定的文件中读取 length 个字节到 buf 所在的缓冲区中,返回实际读取的字节数
6 int write(int fd, const void *buf, size_t length);    //实现把 length 个字节从 buf 指向的缓冲区中写到文件描述符 fd 所指向的文件中,返回实际写入的字节数
1 /* 定位,随机指定位置进行读写,此函数将文件读写指针相对 whence 移动 offset 个字节,操作成功时,返回文件指针相对于文件头的位置 */
2 int lseek(int fd, offset_t offset, int whence);

  参数 whence 的值如下:

  技术分享图片

  技术分享图片

1 /* 关闭 */
2 int close(int fd);

 

 二、C库函数调用

1 /* 打开,用于打开指定文件,mode 为打开模式 */
2 FILE fopen(const char *path, const char *mode);

  打开模式的标志如下:

  技术分享图片

  b 用于区分二进制文件和文本文件,但Linux中不区分二进制文件和文本文件

 1 /* 读写 */
 2 int fgetc(FILE *stream);
 3 int fputc(int c, FILE *stream);
 4 char *fgets(char *s,int n, FILE *stream);
 5 int fputs(const char *s,FILE *stream);
 6 int fprintf(FILE *stream, const char *format, ...);
 7 int fscanf(FILE *stream, const char *format, ...);
 8 //实现从流(stream)中读取 n 个字段,每个字段为 size 个字节,并将读取的字段放入 ptr 所指的字符数组中,返回实际已读取的字段数
 9 //当读取的字段数小于 num 时,可能是在函数调用时出现了错误,也可能是读到了文件末尾。因此要通过调用 feof() 和 ferror() 来判断
10 size_t fread(void *ptr, size_t size, size_t n, FILE *stream);
11 //实现从缓冲区 ptr 所指的数组中把 n 个字段写到流(stream)中,每个字段长为 size 个字节,返回实际写入的字段数
12 size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream);
13 
14 /* 读写过程中的定位函数 */
15 int fgetpos(FILE *stream, fpos_t *pos);
16 int fsetpos(FILE *stream, const fpos_t *pos);
17 int fseek(FILE *stream, long int offset, int whence);
1 /* 关闭 */
2 int fclose(FILE *stream);

  技术分享图片

 

  技术分享图片

 

以上是关于文件系统操作的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode 如何操作用户自定义代码片段(快捷键)

Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段

Java itext为pdf 文件添加水印核心功能代码片段

我的Android进阶之旅关于Android平台获取文件的mime类型:为啥不传小写后缀名就获取不到mimeType?为啥android 4.4系统获取不到webp格式的mimeType呢?(代码片段