在UNIX/Linux系统中,文件操作是系统编程和日常使用中不可或缺的一部分。文件不仅限于传统的文本或二进制数据,还包括目录、设备、管道等。下面我将详细解释一些常用的文件操作函数和概念。
文件描述符
在UNIX/Linux中,文件描述符(File Descriptor)是一个非负整数,用于表示打开的文件、套接字、管道等。每个进程都有自己独立的文件描述符表,用于跟踪打开的文件。标准输入(stdin)、标准输出(stdout)和标准错误(stderr)分别用文件描述符0、1、2表示。
文件分类
- 文本文件:包含人类可读的字符数据,如源代码、文本文档、HTML文件等。文本文件通常包含换行符(如
\n
)作为行的结束标志。 - 二进制文件:包含非文本数据,如可执行文件、图片、音频、视频等。二进制文件中的数据以字节为单位存储,不直接对应人类可读的字符。
-
示例:
数据 65536
字符串方式:"65536" 空间 6byte 文本文件
整形方式: 空间 4byte, 二进制文件
-
不同类型所占空间不一致
文件操作函数
标准I/O函数(基于stdio.h)
- fopen():打开文件,并返回一个指向
FILE
对象的指针。 - fclose():关闭一个打开的文件。
- fread():从文件流中读取数据。
- fwrite():向文件流中写入数据。
- getc() 和 getchar():从文件或标准输入中读取一个字符。
getchar()
是getc(stdin)
的宏定义。 - gets()(已废弃):从标准输入读取一行,但由于可能导致缓冲区溢出,已被废弃。建议使用
fgets()
代替。 - fgets():从文件或标准输入中读取一行,并存储到字符串中。
- fseek():移动文件内的读写位置指针。
低级I/O函数(基于unistd.h或fcntl.h)
- open():打开和可能创建一个文件,返回一个文件描述符。
- close():关闭一个打开的文件描述符。
- read():从文件描述符指向的文件中读取数据。
- write():向文件描述符指向的文件中写入数据。
- lseek():移动文件读写位置指针。
其他函数
- file 命令:在shell中,
file 文件名
命令用于显示文件的类型信息。 - sprintf():虽然不直接用于文件操作,但它是C语言中用于格式化字符串的强大函数,经常与文件操作结合使用,以构建要写入文件的字符串。