操作系统:哪些函数属于系统调用?
系统调用是操作系统提供的接口,用于用户程序请求操作系统内核执行特定的低级操作。以下是一些常见的系统调用函数,根据操作系统的不同(如 Unix/Linux、Windows 等),系统调用可能有所不同,但以下列表主要基于 Unix/Linux 环境:
1. 文件和目录操作
open():打开文件或设备。close():关闭文件描述符。read():从文件或设备读取数据。write():向文件或设备写入数据。lseek():重新定位文件读写指针。unlink():删除文件。mkdir():创建目录。rmdir():删除目录。stat():获取文件的状态信息。rename():重命名文件或目录。
2. 进程管理
fork():创建一个子进程。execve():执行一个新程序。wait():等待子进程终止。exit():终止进程并返回状态给父进程。getpid():获取当前进程的进程ID。getppid():获取父进程的进程ID。kill():向进程发送信号。
3. 内存管理
brk():改变数据段的结束位置(通常用于管理堆内存)。mmap():将文件或设备映射到内存。munmap():解除文件或设备的内存映射。mprotect():设置内存保护属性。
4. 网络通信
socket():创建一个新的套接字。bind():将套接字绑定到本地地址。listen():监听连接请求。accept():接受连接请求。connect():连接到远程主机。send():向套接字发送数据。recv():从套接字接收数据。
5. 线程管理
clone():创建一个新线程或进程。pthread_create():创建一个新的POSIX线程(这是一个用户级库函数,但它在内部会调用clone()或其他系统调用)。pthread_join():等待线程结束。
6. 时间管理
time():获取当前时间。gettimeofday():获取当前时间和时区。nanosleep():高精度睡眠。
7. 设备管理
ioctl():设备控制接口,用于设备的各种操作。select():监视文件描述符(用于多路复用I/O操作)。poll():类似于select(),用于多路复用I/O操作。
8. 信号处理
signal():定义信号处理程序。sigaction():设置信号处理程序的行为。sigprocmask():改变进程的信号屏蔽。
9. 进程间通信(IPC)
pipe():创建管道,用于进程间通信。shmget():获取共享内存段。shmat():将共享内存段附加到进程的地址空间。msgget():创建或访问消息队列。semget():创建或访问信号量集。
这些系统调用都是操作系统为用户程序提供的接口,通过这些系统调用,用户程序可以执行涉及硬件和内核资源的操作。由于系统调用涉及用户模式到内核模式的切换,因此相较于普通函数调用,系统调用通常会有更大的性能开销。
