文件操作的基本函数

文件操作的基本函数

一、标C下的文件操作基本函数

(1)fopen(3) / fdopen(3) / freopen(3)
#include <stdio.h>
FILE *fopen(const char *path, const char *mode);

功能:
  主要用于打开指定的文件;

参数:
  第一个参数:字符串形式的文件路径名;
  第二个参数:操作文件的具体方式,但不能指定文件本身没有的权限;
    r - - - - - 以只读的方式打开,stream指向文件的开头;
    r+ - - - - 以读写的方式打开,stream指向文件的开头;
    w - - - – 以只写的方式打开,若文件存在,会清空原文件中的内容;若不存在,则创建文件,stream指向文件的开头;
    w+ - - – 以读写的方式打开,除此外和w相同;
    a - - - - - 以追加写入的方式打开,若文件不存在,会创建文件,stream指向文件的末尾;
    a+ - - - - 以读写的方式打开,stream指向文件的开头,但写入时会从文件末尾追加写入;(不建议同时进行读取和写入操作
  如果要对二进制文件进行操作,那么在选择具体的方式中应添加字母b

返回值:
  success —- FILE结构体类型的指针,error —- NULL;

struct _IO_FILE {
    int _flags;
    char* _IO_read_ptr;
    ......
};
typedef struct _IO_FILE FILE;
#include <stdio.h>
FILE *fdopen(int fd, const char *mode);

功能:
  主要用于将文件描述符对应的文件转换为文件指针后返回,mode代表文件操作的具体方式,此处必须和原先文件描述词读写模式相同;

返回值:
  success —- 文件指针,error —- NULL;

#include <stdio.h>
FILE *freopen(const char *path, const char *mode, FILE *stream);

功能:
  主要用于实现重定向,把预定义的标准流文件定向到由path指定的文件中。

参数:
  第一个参数:指定的重定向的字符串形式文件路径名;
  第二个参数:文件访问的具体权限,如:”r”表示“只读访问;
  第三个参数:流文件,一般使用标准流文件,如:stdin、stdout、stderr;

返回值:
  success —- 指向该输出流的文件指针,error —- NULL;


(2)fclose(3)
#include <stdio.h>
int fclose(FILE *stream);

功能:
  主要用于关闭指定的文件,参数是fopen(3)的返回值;

返回值:
  success —- 0,error —- EOF;

(3)fread(3)
#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
/* size_t = long unsigned int */

功能:
  主要用于读取指定文件中的内容;

参数:
  第一个参数:存放读取内容的地址;
  第二个参数:读取数据类型的大小;
  第三个参数:读取相同数据类型的个数;
  第四个参数:结构体类型的指针,同样是fopen(3)的返回值;

返回值:
  success —- 实际读取指定数据类型的个数,error和end-of-file —- 0;(区分应使用feof(3)ferror(3)

(4)fwrite(3)
#include <stdio.h>
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

功能:
  主要向指定的文件中写入内容;

参数:
  第一个参数:存放要写入数据空间的地址;
  第二个参数:存入数据类型的大小;
  第三个参数:存入相同数据类型的个数;
  第四个参数:结构体类型的指针,同样是fopen(3)的返回值;

返回值:
  success —- 实际存入指定数据类型的个数,error和end-of-file —- 0;(区分应使用feof(3)ferror(3)

(5)fseek(3)
#include <stdio.h>
int fseek(FILE *stream, long offset, int whence);

功能:
  主要用于设置stream指向的位置;

参数:
  第一个参数:结构体类型的指针,同样是fopen(3)的返回值;
  第二个参数:指定的偏移量;
    >0 - - - - - - 向后偏移,也就是向文件末尾方向;
    0 - - - - - - -偏移量为0;
    <0 - - - - - - 向前偏移,也就是向文件开头方向;
  第三个参数:指定起始位置;
    SEEK_SET - - - - 文件开头位置(向后偏移合理,向前偏移不合理)
    SEEK_CUR - - – 文件当前位置(向前向后偏移都合理)
    SEEK_END - - – 文件末尾位置(向前向后偏移都合理)

(6)rewind(3)
#include <stdio.h>
void rewind(FILE *stream);

功能:
  将偏移量设置为文件的开头,即等同与(void) fseek(stream, 0L, SEEK_SET),其中0L等于0字节;

(7)ftell(3)
#include <stdio.h>
long ftell(FILE *stream);

功能:
  主要用于获取当前位置的偏移量,配合fseek(3)可获得文件的大小信息,参数是结构体类型的指针,同样是fopen(3)的返回值;

返回值:
  success —- 当前位置的偏移量,error —- -1;


二、UC下的文件操作基本函数

(1)creat(2)
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int creat(const char *pathname, mode_t mode);

功能:
  主要用来创建一个文件;

参数:
  第一个参数:字符串形式的文件路径名;
  第二个参数:创建文件的具体权限,如:0664;

返回值:
  success —- 文件描述符,error —- -1;

(2)open(2)
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags, mode_t mode);

功能:
  主要用来打开或创建一个文件;

参数:
  第一个参数:字符串形式的文件路径名;
  第二个参数:具体的标志如下所示;
    其中O_RDONLY | O_WRONLY | O_RDWR必须三者择一
    其它标志可根据需要选择:
      O_APPEND - - - - 追加写入,即打开文件时文件位置偏移量在文件末尾;
      O_CREAT - - - - – 若文件不存在,则创建文件;
      O_EXCL - - - - - - -通常与O_CREAT配合使用,若文件不存在,则创建文件,若文件存在,则失败;
      O_TRUNC - - - - -若文件存在,则清空文件内容,文件大小变为0字节
  第三个参数:创建文件的具体权限,如:0664;

返回值:
  success —- 文件描述符,error —- -1;

(3)close(2)
#include <unistd.h>
int close(int fd);

功能:
  主要用于关闭一个被打开的文件。

参数:
  第一个参数:文件描述符,也就是open()的返回值;

(4)read(2)
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
/* ssize_t = long int; size_t = long unsigned int; */

功能:
  主要用于读取指定文件中的内容;

参数:
  第一个参数:文件描述符,同样是open()的返回值;
  第二个参数:存放读取数据空间的地址;
  第三个参数:期望读取的字节数;

返回值:
  success —- 实际读取的字节数,error —- -1;

(5)write(2)
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);

功能:
  主要用于向指定文件中写入内容;

参数:
  第一个参数:文件描述符,同样是open()的返回值;
  第二个参数:要写入的数据的存储地址;
  第三个参数:期望写入的字节数;

返回值:
  success —- 实际写入的字节数,error —- -1;

(6)lseek(2)
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);  //off_t = long int;

功能:
  主要用于重新定位文件读写时的偏移量,可以获取文件的大小信息;

参数:
  第一个参数:文件描述符,同样是open()的返回值;
  第二个参数:指定偏移量;
    >0 - - - - - - 向后偏移,也就是向文件末尾方向;
    0 - - - - - - -偏移量为0;
    <0 - - - - - - 向前偏移,也就是向文件开头方向;
  第三个参数:指定起始位置;
    SEEK_SET - - - - 文件开头位置(向后偏移合理,向前偏移不合理)
    SEEK_CUR - - – 文件当前位置(向前向后偏移都合理)
    SEEK_END - - – 文件末尾位置(向前向后偏移都合理)

返回值:
  success —- 距离文件开头位置的偏移量,error —- (off_t)-1;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值