标准I/O

提示:以下为本人学习记录,如有错误还请谅解


前言

标准 I/O 库函数是构建于文件 I/O(open()、read()、write()、lseek()close()等)这些系统调用之上的,譬如标准 I/O 库函数 fopen()就利用系统调用 open()来执行打开文件的操作、fread()利用系统调用 read()来执行读文件操作、fwrite()则利用系统调用 write()来执行写文件操作等等。说白了就是对文件IO的封装,标准 I/O 内部实际上是调用文件 I/O 来完成实际操作的。但是在某些方面标准IO是优于文件IO,比如在性能、效率上,标准 I/O 要优于文件 I/O。


一、FILE 指针

文件 I/O 函数(open()、read()、write()、lseek()等)都是围绕文件描述符进行的,当调用 open()函数打开一个文件时,即返回一个文件描述符 fd,然后该文件描述符就用于后续的 I/O 操作。对于标准I/O而言它们的操作是围绕 FILE 指针进行的,当使用标准 I/O 库函数打开或创建一个文件时,会返回一个指向 FILE 类型对象的指针(FILE *),使用该 FILE 指针与被打开或创建的文件相关联,然后该 FILE 指针就用于后续的标准 I/O 操作

二、打开文件 fopen()

fopen函数原型如下

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

其中mode为字符串类型可取值如下

r :以只读方式打开文件。
r+: 以可读、可写方式打开文件。

w:以只写方式打开文件,如果参数 path 指定的文件存在,将文件长度截断为 0;如果指定文件不存在则创建该文件。

w+:以可读、可写方式打开文件,如果参数 path 指定的文件存在,将文件长度截断为 0;如果指定文件不存在则创建该文件。

a:以只写方式打开文件,打开以进行追加内容(在文件末尾写入),如果文件不存在则创建该文件。

a+:以可读、可写方式打开文件,以追加方式写入(在文件末尾写入),如果文件不存在则创建该文件。
###用 fopen()函数新建文件时无法手动指定文件的权限,但却有一个默认值:S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH (0666)

三、标准I/O简单使用示例

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
 char buf[] = "Hello World!\n";
 FILE *fp = NULL;
 /* 打开文件 */
 if (NULL == (fp = fopen("./test_file", "w"))) {
 perror("fopen error");
 exit(-1);
 }
 printf("文件打开成功!\n");
 /* 写入数据 */
 if (sizeof(buf) >
 fwrite(buf, 1, sizeof(buf), fp)) {
 printf("fwrite error\n");
 fclose(fp);
 exit(-1);
 }
 printf("数据写入成功!\n");
 /* 关闭文件 */
 fclose(fp);
 exit(0);
}

首先使用 fopen()函数将当前目录下的 test_file 文件打开,调用 fopen()时 mode 参数设置为"w",表示以只写的方式打开文件,并将文件的长度截断为 0,如果指定文件不存在则创建该文件。打开文件之后调用fwrite()函将"Hello World!"字符串数据写入到文件中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值