摘要:
系统调用:所谓系统调用,就是内核提供的、功能十分强大的一系列的函数。这些系统调用是在内核中实现的,再通过一定的方式把系统调用给用户,一般都通过门(gate)陷入(trap)实现。系统调用是用户程序和内核交互的接口。系统调用,英文名system call,每个操作系统都在内核里有一些内建的函数库,这些函数可以用来完成一些系统系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序,如果没有系统调用和内核函数,用户将不能编写大型应用程序,及别的功能,这些函数集合起来就叫做程序接口或应用编程接口(Application Programming Interface 阅读全文
摘要:
linux文件IO操作有两套大类的操作方式:不带缓存的文件IO操作,带缓存的文件IO操作。不带缓存的属于直接调用系统调用(system call)的方式,高效完成文件输入输出。它以文件标识符(整型)作为文件唯一性的判断依据。这种操作不是ASCI标准的,与系统有关,移植有一定的问题。而带缓存的是在不带缓存的基础之上封装了一层,维护了一个输入输出缓冲区,使之能跨OS,成为ASCI标准。大体说来,不带缓存的方式频繁进行用户态和内核态的切换,高效但是需要程序员自己维护;带缓冲的方式因为有了缓冲区,不是非常高效,但是易于维护。由此,不带缓冲区的通常用于文件设备的操作,而带缓冲区的通常用于普通文件的操作。 阅读全文
摘要:
带缓存IO也叫标准IO,符合ANSI C 的标准IO处理,不依赖系统内核,所以移植性强。我们使用标准IO操作很多时候是为了减少对read()和write()的系统调用次数,带缓存IO其实就是在用户层再建立一个缓存区,这个缓存区的分配和优化长度等细节都是标准IO库代你处理好了,不用去操心。标准IO操作数据流向路径: 数据——流缓存区——内核缓存区——磁盘非标准IO(不带缓冲)操作数据流向路径: 数据——内核缓存区——磁盘————————————————————————————————————标准的 C 库函数建立... 阅读全文
摘要:
linix对IO文件的操作分为不带缓存的IO操作(文件IO都是不带缓存IO)和带缓存的标准IO操作. 刚开始,要明确以下几点: 不带缓存,其实不是直接对磁盘文件进行读取操作,像read()和write()函数,它们都属于系统调用,只不过在用户层没有缓存,所以叫做无缓存IO,但对于内核来说,还是进行了缓存,只是用户层看不到罢了。1. linux的文件I/O是一种低级的I/O,由操作系统提供的基本IO服务。(底层) 而标准I/O是ANSIC建立的一种标准I/O模型,是一种标准函数包和stdio.h头文件中的定义,具有一定的可移植性。(标准库封装)2. 标准I/O默认采用了缓冲机制,还... 阅读全文