linux系统编程二:系统调用函数

Linux平台下的文件操作

库函数:由库来实现,在用户态执行,部分库函数需要转调系统调用函数。

系统调用函数:是系统内核提供给用户访问系统管理底层硬件的接口,系统调用函数用户层只是一个接口,函数的具体实现都是由操作系统实现,并且在内核态执行。

Open函数:打开(或创建)一个文件

       Int open(const char *path,int flag, /*int mode*/)这是系统调用函数open函数的参数列表,该函数返回一个非负整型值作为文件描述符,出错返回-1.第一个参数代表要打开的文件的路径和文件名,第二个参数代表指定的打开方式,第三个参数只有在需要打开的文件不存在,新创建时指定其访问权限时使用。

打开方式:

  1. O_RDONLY:以只读方式打开
  2. O_WRONLY:以只写方式打开
  3. O_RDWR:以读写方式打开

注意:在上面这三个常量中必须指定一个且只能指定一个。

  1. O_CREAT:若文件不存在,则创建它,此时会用到第三个参数
  2. O_TRUNC:如果文件存在且只为读写或写打开,将其长度截断为0
  3. O_APPEND:每次写时都追加到文件的末尾。

Read函数:读数据

       Int read(int fd,void *buff, int size)该函数返回值代表读到的实际数据字节数的字节个数,fd表示要写入文件的文件描述符(open函数的返回值指定操作打开文件),buff表示读取的内容的存储缓冲区,size指定要读的数据的字节数

Write函数:写入数据

       Int write(int fd, void *buff, int size)该函数返回值表示写成功的字节数,fd表示要写入的文件的文件描述符,buff指定要写的数据的起始地址,size表示要写的数据的字节长度

Close函数:关闭一个文件

       Int close(int fd)关闭文件描述符为fd的文件

Lseek函数:移动读写游标

       Int lseek(int fd, int size, int flag)fd表示文件描述符,size表示相对于第三个参数flag要移动的字节数。Flag的值为宏:SEEK_SET, SEEK_CUR, SEEK_END(分别表示文件的起始位置,当前位置和文件末尾)。

系统调用函数的执行过程:

       每一个系统调用函数都有其唯一的系统调用号,当用户调用一个系统调用函数时,

  1. 首先会把该系统调用函数的系统调用号用eax寄存器保存起来,
  2. 然后保存进程运行的状态(即保存现场)
  3. 触发0x80中断,由内核态开始接管并且执行中断处理程序
  4. 在内核中有一个系统调用表,上面记录了每个系统调用号相对应的系统调用函数的位置,找到该位置,开始执行系统调用函数
  5. 系统调用函数执行完成,返回用户态继续执行进程

猜你喜欢

转载自blog.csdn.net/Mr_H9527/article/details/82469102