linux 读写文件函数

C库中的文件读写函数

头文件:stdio.h

fopen

功能:打开文件
声明

FILE *fopen(const char *filename, const char *mode)

参数

  • filename:要打开的文件名(包括路径)
  • mode:文件访问模式
模式描述文件不存在时
“r”(只读)打开一个已存在的文件出错
“w”(只写)打开一个用于写入的空文件,若文件存在,则会删除已有文件内容,文件被视为一个新的空文件创建文件
“a”(追加)追加到一个文件。写文件向文本尾添加数据创建文件
“r+”(读写)打开一个用于更新的文件出错
“w+”(读写)打开一个读写空文件,若文件存在,则文件长度清零创建文件
“a+”(读写)用于读取和追加文件新建文件

其他文件模式

1. 文件使用模式由:r,w,a,t,b,+六个字符拼成,个字符的含义是:
	r(read):读
	w(write):写
	a(append):追加
	t(text):文本文件,可省略不写
	b(banary):二进制文件
	+:读和写
	例如rb+表示打开一个二进制文件,允许读写

返回值
成功:返回一个FILE类型的指针
失败:NULL,且设置全局变量errno来标识错误

fclose

功能
关闭流stream,刷新所有缓冲区。
声明

int fclose(FILE *stream)

参数

  • stream:指向FILE对象的指针,该对象指定了要被关闭的文件
    返回值
    成功:0
    失败:EOF

fread

功能
读取数据到ptr所指向的数组中
声明

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)

参数

  • ptr:指向带有最小尺寸 size*nmemb 字节的内存块指针
  • size:要读取的每个元素的大小,以字节为单位
  • nmemb:要读取的元素个数,每个元素的大小为size字节
  • stream:指向要读取的文件的FILE对象
    返回值
    读取到的元素个数,如果与nmemb的个数不同,则可能发生一个错误或者是读到了文件的末尾。

fwrite

功能
将ptr所指向的数据写入到文件中
声明

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)

参数

  • ptr:指向要被写入的元素数组的指针
  • size:要写入的每个元素的大小,以字节为单位
  • nemeb:写入的元素个数,每个元素大小为size字节
  • stream:指向写入的文件的FILE指针
    返回值
    真是写入文件的元素个数

fgets

功能
从指定文件读取一行,并把它存储在str所指向的字符串内,当读取到(n-1)个字符,或者读取到换行符,或者文件末尾的时候停止。
声明

char *fgets(char *str, int n, FILE *stream)

参数

  • str:指向一个字符数组的指针 ,用来存放读取到的数据
  • n:要读取的最大字符数,包含最后的空字符,通常为str传递的数组长度
  • stream:要读取的文件的FILE对象指针
    返回值
    成功:返回读取到的字符。如果读到文件的末尾或者没有读到任何字符,str内容保持不变,并返回 空指针
    失败:返回 空指针

fputs()

功能
把字符串写入到指定则文件中,但是不包括空字符
声明

int fputs(const char *str, FILE *stream)

参数

  • str:要写入的字符串
  • stream:要写入的文件的FILE对象指针
    返回值
    成功:非负值
    失败:EOF

注意:fgets和fputs是字符串读写,fread和fwrite是数据块读写

系统中的读写文件函数

open

功能:打开文件
声明

int open(const char *pathname, int flags)
int open(const char *pathname, int flags, mode_t mode)

参数

  • pathname:文件路径,若有多级目录则先建目录

  • flags:以下选项三选一

    1. O_RDONLY:只读模式
    2. O_WRONLY:只写模式
    3. O_RDWR:读写模式

    可选:
    O_APPEND:每次写操作都写入文件末尾
    O_CREAT:如果指定文件不存在,创建文件
    O_EXCL:如果要创建的文件已存在,返回-1,并修改errno的值
    O_TRUNC:如果文件存在,并且以只写/读写的方式打开,则清空文件全部内容(将其长度截断为0)
    O_NOCTTY:如果路径指向终端设备,不要把这个舍内用作控制终端
    O_NONBLOCK:如果路径指向FIFO/块文件/字符文件,则把文件的打开和后继I/O

  • mode:生成文件的权限

返回值
成功:文件描述符,一个非负整数
失败:-1

close

功能:关闭文件
声明

int close(int fd)

参数

  • fd:要关闭的文件对应的文件描述符

返回值
成功:0
失败:-1

除了使用close函数显式关闭文件外,在linux系统中,当一个进程终止时,内核会自动关闭他打开的所有文件。

read

功能:读文件
声明

ssize_t read(int fd, void *buf, size_t count)

参数

  • fd:要读取的文件的文件描述符
  • buf:用于存放读取到的数据
  • count:需要读取的字节数
    返回值
    成功:读取到的字节数

write

功能:写文件
声明

ssize_t write(int fd, const void *buf, size_t count)

参数

  • fd:要写入的文件的文件描述符
  • buf:指定写入数据对应的缓冲区
  • count:指定写入的字节数

返回值
成功:写入的字节数,0表示未写入任何字节,如果返回的数字小于count,并不是错误,有可能是磁盘空间已满
失败:-1

fopen和open的区别

  1. fopen是标准库函数,open是POSIX定义的,UNIX的系统函数
  2. 使用fopen系列函数时要定义指代文件的对象,一个FILE结构体,open函数的返回值是int类型的文件描述符
  3. fopen是带有缓冲区的,open是不带缓冲区,直接写入磁盘的
  4. open在新建文件时可以指定文件的权限
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值