本篇文章主要记录c语言中的文件操作,以及c语言的分文件写法。
c语言中的文件操作可以说是非常的简单,api使用起来很方便,感觉比java要简单很多。在c语言中会把设备也当作文件处理,例如屏幕、键盘等。
FILE结构体
文件操作需要引入stdio.h头文件
在c语言中想要操作文件,离不开FILE这个结构体,这个结构体里面会有与文件相关的参数。
typedef struct
{
short level; /* 缓冲区"满"或者"空"的程度 */
unsigned flags; /* 文件状态标志 */
char fd; /* 文件描述符 */
unsigned hold; /* 如无缓冲区不读取字符 */
short bsize; /* 缓冲区的⼤小 */
unsigned *buffer; /* 数据缓冲区的位置 */
unsigned ar; /* 指针,当前的指向 */
unsigned istemp; /* 临时⽂文件,指⽰示器 */
short token; /* ⽤用于有效性的检查 */
}FILE;
一般情况下我们不会去读取FILE结构体里面的成员的。
文件操作
文件操作分为固定的几个步骤
-
打开文件指针
c语言中有三个默认打开的文件指针stdin、stdout、stderr,分别对应标准输入,标准输出,标准错误输出,这三个文件指针可以直接使用,举个列子,具体api后面介绍
//定义一个字符串
char *str = "hello world";
//将这个字符串输出到stdout所指向的文件,也即标准输出,也就是屏幕
fputs(str, stdout);
打开文件api是fopen
//通过fopen函数来打开一个函数执政
FILE *fp = fopen("./test.txt", "w");
- 对文件进行读写
//文件的读写主要设计6个函数
fgetc fputc 单个字符的读写
fgets fputs 按行来读写
fread fwirte 按块来读写
fprintf fscanf 格式化读写
fprintf fscanf 可以与 sprintf sscanf对比来看
- 关闭文件指针,关闭文件指针的时候就会刷新缓冲区
int main()
{
//打开文件,如果文件不存在则创建,如果存在,则内容覆盖
FILE *fp = fopen("./test.txt", "w");
//操作文件
fputs("hello world", fp);
//关闭文件
fclose(fp);
fp = NULL;
return 0;
}
文件读写的时候,都会现将文件读写入缓冲区,只有缓冲区满的时候,才会真正读入内存或写入文件。可以通过fflush函数强制刷新缓冲区。
文件打开方式
文件打开方式主要记录几种常用的
- r 以读方式打开文件,文件不存在则报错
- w 以写方式打开文件,文件不存在则创建,文件存在则覆盖
- r+ w+ 加上+后,就表示可读写,其他特性和不加+一样
- a 以追加的方式写文件,如果文件不存在则创建
文件操作很简单,基本就这些内容。
分文件写法
c语言有个要求,就是变量、函数都需要先声明,后使用。所以我们一般会把变量、函数的声明单独写在一个文件,我们把这个文件叫做头文件,也就是.h结尾的文件,而把定义、实现写在.c文件中,这样别的文件就可以通过#include指令引入头文件,也就有了变量或函数的声明了。
- 头文件
#ifndef _SORT_H
#define _SORT_H
/**
* 冒泡排序
*/
int bubbleSort(int *array, int length);
/**
* 选择排序
*/
int selectSort(int *array, int length);
#endif //_SORT_H
#ifndef #define #endif 这几个是预处理指令,用途是避免头文件的重复包含,导致死循环,例如a包含b,b又包含a。
- 实现 在.c结尾的文件中对声明的函数进行实现
int bubbleSort(int *array, int length)
{
if (array == NULL || length <= 0)
{
return -1;
}
//中间变量,用于交换
int temp;
for (int i = 0; i < length - 1; i++)
{
for (int j = 0; j < length - 1 - i; j++)
{
if (array[j] > array[j + 1])
{
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
return 0;
}
- 使用
#include "sort.h"
int main()
{
//定义数组
int array[] = {1, 2, 7, 4};
//计算数组长度
int length = sizeof(array) / sizeof(array[0]);
//直接调用函数即可,因为引入了sort.h头文件中的声明了
bubbleSort(array, length);
return 0;
}
c语言相关的内容就先记录到这里。