操作系统:哪些函数属于系统调用?
系统调用是操作系统提供的接口,用于用户程序请求操作系统内核执行特定的低级操作。以下是一些常见的系统调用函数,根据操作系统的不同(如 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()
:创建或访问信号量集。
这些系统调用都是操作系统为用户程序提供的接口,通过这些系统调用,用户程序可以执行涉及硬件和内核资源的操作。由于系统调用涉及用户模式到内核模式的切换,因此相较于普通函数调用,系统调用通常会有更大的性能开销。