0%

系统调用类型

系统调用(syscall)的类型

系统调用是操作系统提供的接口,允许用户程序请求内核执行特定操作。以下是一些常见的系统调用示例(以 Linux 系统为例):

文件操作

  1. sys_open: 打开文件。
  2. sys_read: 读取文件内容。
  3. sys_write: 写入数据到文件。
  4. sys_close: 关闭文件描述符。
  5. sys_lseek: 移动文件指针。

进程控制

  1. sys_fork: 创建子进程。
  2. sys_execve: 执行新程序。
  3. sys_waitpid: 等待子进程结束。
  4. sys_exit: 退出进程。
  5. sys_getpid: 获取当前进程ID。

内存管理

  1. sys_mmap: 映射文件或设备到内存。
  2. sys_munmap: 解除映射内存区域。
  3. sys_brk: 调整数据段末尾。

网络操作

  1. sys_socket: 创建网络套接字。
  2. sys_bind: 绑定套接字到地址。
  3. sys_listen: 监听连接请求。
  4. sys_accept: 接受连接请求。
  5. sys_recv: 接收数据。
  6. sys_send: 发送数据。

时间与日期

  1. sys_time: 获取当前时间。
  2. sys_gettimeofday: 获取当前时间和微秒。

目录操作

  1. sys_opendir: 打开目录。
  2. sys_readdir: 读取目录内容。
  3. sys_closedir: 关闭目录流。

权限管理

  1. sys_chown: 更改文件所有者和组。
  2. sys_chmod: 更改文件权限。

信号处理

  1. sys_kill: 发送信号到进程。
  2. sys_signal: 设置信号处理函数。

设备管理

  1. sys_ioctl: 执行设备控制操作。

示例代码

以下是一个简单的示例,展示如何使用系统调用打开文件并写入内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <unistd.h>
#include <fcntl.h>
#include <sys/syscall.h>

int main() {
const char *message = "Hello, World!\n";

// 使用 sys_open 打开文件
int fd = syscall(SYS_open, "output.txt", O_WRONLY | O_CREAT, 0644);
if (fd < 0) {
return 1; // 错误处理
}

// 使用 sys_write 写入文件
syscall(SYS_write, fd, message, 14);

// 使用 sys_close 关闭文件
syscall(SYS_close, fd);

return 0;
}