文件IO(一)
- 文件IO
- 文件的分类
- 在文件IO下,文件分类
- 按存储的内容分
- 按照操作分
- 标准IO和文件IO的区别
- 系统调用和库函数的区别
文件IO
- 把程序暂存在内存的数据,存储到本地外存上
文件的分类
在Linux系统下,文件共分为7类
- 普通文件
d 目录文件
p 管道文件
l 链接文件
b 块设备文件
c 字符设备文件
s 套接字(Socket)文件 跨主机之间的通信
在文件IO下,文件分类
按存储的内容分
文本文件:存储的是数据的阿斯克码(0~127),EOF(end of file,-1)
二进制文件:存储的是数据在内存上的原样存储
文本文件,在存储的时候,需要数据和阿斯玛转换,一般存储数据量比较大的数据,最终结果
二进制文件,一般存储中间变量
按照操作分
带缓冲区操作的文件:标准IO,内存上的缓冲区,库函数
不带缓冲区操作的文件:文件IO
标准IO和文件IO的区别
标准IO:
1.标准IO由ANSI C标准定义, 库函数提供的
2.跨平台性,移植性较好
3.有缓冲区的操作,标准IO的效率比文件IO的效率高
4.一般以文件流指针作为操作依据
文件IO:
1.由POSIX定义,操作系统提供的系统调用提供的
2.移植性差
3.效率较低
4.一般以文件描述符作为操作依据
系统调用和库函数的区别
- 提供者:
- 系统调用:由操作系统内核提供。它们是内核暴露给应用程序的接口,用于请求内核执行某些操作,如
文件操作、进程管理、内存管理等。 - 库函数:由标准库或第三方库提供。这些函数通常是对系统调用的封装,也可能包含其他功能,如数学
运算、字符串处理等。
- 运行时间:
- 系统调用:属于机器时间,执行时通常涉及用户态到内核态的切换,这通常比用户态内的操作更耗时。
- 库函数:属于用户时间,在用户态执行,不涉及上下文切换,因此通常更快。
- 运行空间:
- 系统调用:在内核空间执行,这是操作系统保护的区域,用于执行特权操作。
- 库函数:在用户空间执行,这是应用程序运行的地方。
- 效率:
- 系统调用:由于涉及上下文切换和内核态执行,通常比库函数调用更耗时。
- 库函数:在用户态执行,没有上下文切换的开销,因此通常更高效。
- 移植性:
- 系统调用:依赖于特定的操作系统和内核,因此通常不易移植到其他操作系统。
- 库函数:如果遵循标准库规范,通常可以在多种操作系统上运行,具有较好的移植性。
- 返回值:
- 系统调用:通常返回特定的错误码或状态信息,用于指示调用是否成功以及可能的错误原因。
- 库函数:返回值取决于具体的函数,可能返回计算结果、指针、状态码等。
- 功能的复杂程度:
- 系统调用:通常执行底层的、原子性的操作,如打开文件、创建进程等。
- 库函数:可能执行更复杂的任务,这些任务可能涉及多个系统调用或其他库函数的组合。
- 功能能否重写:
- 系统调用:作为操作系统的一部分,通常不能由用户重写。
- -库函数:用户可以根据自己的需要重写库函数,或者使用不同的库实现相同的功能。
总的来说,系统调用提供了与操作系统内核交互的接口,而库函数则为用户提供了更高级、更易于使用的功能。