1、系统调用:所有的操作系统都提供多种服务的入口点,程序由此向内核请求服务。这些可直接进入内核的入口点被称为系统调用。
2、操作系统提供的服务:进程控制、文件系统控制、内存管理、网络管理、用户管理、进程间通信。 在Linux中,为了更好地保护内核空间,程序的运行空间分为内核空间和用户空间(也就是常称的内核态和用户态),它们分别运行在不同的级别上,在逻辑上是相互隔离的。因此,用户进程在通常情况下不允许访问内核数据,也无法使用内核函数,它们只能在用户空间操作用户数据,调用用户空间的函数。
3、文件:系统资源(内存、硬盘、一般设备、进程间通信的通道等)的一个抽象, 对系统资源进行访问的一个通用接口。 对资源提供通用的操作接口,可以极大地简化系统编程接口的设计。 文件类型: 普通文件 一般意义上的文件,作为数据存储在磁盘中,可以随机访问文件的内容。Linux系统中的文件是面向字节的,文件的内容以字节为单位进行存储和访问。 目录文件 目录是一种特殊的文件,目录可以像普通文件一样打开、关闭以及进行相应的操作。 管道文件 管道是Linux中的一种进程间通信的机制。 设备文件 设备文件没有具体的内容,对设备文件的读写操作实际上与某个设备的输入输出操作关联在一起。 符号链接 符号链接的内容是指向另一个文件的路径。当对符号链接进行操作时,系统会根据情况将这个操作转移到它所指向的文件上去,而不是对它本身进行操作。
文件描述符:所有执行I/O操作的系统调用使用文件描述符来表示打开的文件。 文件描述符是一个非负整数。文件描述符可以表示各种类型的打开的文件。对文件的操作只要使用文件描述符即可指定所操作的文件。
4、文件操作过程:打开文件,打开成功后,应用程序将获得文件描述符。 应用程序使用文件描述符对文件进行读写等操作。全部操作完毕后,应用程序需要将文件关闭以释放用于管理打开文件的内存。
几个文件操作函数: open()
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);read()
#include <unistd.h> ssize_t read(int fd, void *buf, size_t count);write()
#include <unistd.h> ssize_t write(int fd, const void *buf, size_t count);close()
#include <unistd.h> int close(int fd);lseek()
#include <sys/types.h> #include <unistd.h> off_t lseek(int fildes, off_t offset, int whence);