在 Linux 系统中,系统调用是应用程序与内核之间交互的接口,它允许程序执行内核提供的服务,例如文件操作、进程管理、内存分配等。以下是一些常用的 Linux 系统调用:
1. 进程管理
fork()
:创建一个新进程,父进程和子进程会从fork()
返回,但返回值不同(父进程返回子进程的 PID,子进程返回 0)。exec()
:用于执行一个新程序,替换当前进程的映像。常见的有execve()
,execl()
,execp()
等。exit()
:终止进程的执行,并返回一个退出状态码给父进程。wait()
/waitpid()
:等待一个子进程终止,获取子进程的退出状态。getpid()
:获取当前进程的 PID(进程标识符)。getppid()
:获取当前进程的父进程 PID。kill()
:发送信号给进程,常用于进程间通信(IPC)或终止进程。clone()
:创建一个新进程或线程,是fork()
的一种更灵活的实现方式,支持更多的参数控制。
2. 文件操作
open()
:打开文件,返回文件描述符。read()
:从文件描述符读取数据。write()
:向文件描述符写入数据。close()
:关闭文件描述符。lseek()
:移动文件描述符的读写位置。unlink()
:删除一个文件或目录。mkdir()
:创建目录。rmdir()
:删除目录。stat()
/fstat()
:获取文件的状态信息,如文件大小、权限、创建时间等。chown()
:修改文件的拥有者和所属组。chmod()
:修改文件的权限。rename()
:重命名文件或移动文件。
3. 内存管理
mmap()
:映射文件或设备到内存,支持内存映射文件的高效读写。munmap()
:解除内存映射。brk()
/sbrk()
:改变进程的堆空间大小(较老的方法,现在一般使用mmap()
来管理内存)。mprotect()
:改变内存页面的访问权限。mlock()
/munlock()
:锁定或解锁内存页,以防止它们被交换到磁盘上。
4. 系统信息
gettimeofday()
:获取当前时间。clock_gettime()
:获取指定时钟的时间(高精度)。uname()
:获取系统信息,如操作系统名称、版本、体系结构等。sysinfo()
:获取系统的总体信息,如总内存、空闲内存、进程数等。
5. 信号处理
signal()
:设置信号的处理方式(通常使用sigaction()
替代)。sigaction()
:设置信号的处理行为,可以自定义信号处理函数。sigprocmask()
:屏蔽或取消屏蔽信号。kill()
:向一个进程发送信号。pause()
:使进程暂停,直到接收到信号。
6. 管道与进程间通信 (IPC)
pipe()
:创建一个管道,返回两个文件描述符,用于进程间的单向通信。socket()
:创建一个套接字,用于网络通信。bind()
、listen()
、accept()
、connect()
:用于建立和管理网络连接。mmap()
:也可以用于进程间的共享内存。semop()
:操作信号量,用于进程间同步。msgget()
/msgsnd()
/msgrcv()
:用于消息队列的创建和操作。shmget()
/shmat()
/shmdt()
:用于共享内存的操作。
7. 网络操作
socket()
:创建一个网络套接字。bind()
:绑定一个套接字到一个地址。listen()
:监听连接请求。accept()
:接受一个连接。connect()
:建立与服务器的连接。send()
/recv()
:发送和接收数据。sendto()
/recvfrom()
:发送和接收数据报。
8. 定时与调度
timer_create()
、timer_settime()
:创建和设置定时器。nanosleep()
:休眠指定的时间,提供更高精度的休眠。alarm()
:设置一个定时器,用于进程在指定时间后接收SIGALRM
信号。
9. 文件系统管理
mount()
:挂载文件系统。umount()
:卸载文件系统。chroot()
:改变进程的根目录。pivot_root()
:切换根文件系统。
10. 权限与用户管理
getuid()
:获取当前进程的用户 ID。setuid()
:设置进程的用户 ID。getgid()
:获取当前进程的组 ID。setgid()
:设置进程的组 ID。geteuid()
:获取当前进程的有效用户 ID。seteuid()
:设置进程的有效用户 ID。
这些系统调用是 Linux 操作系统提供的基础接口,程序通过调用它们来执行系统级操作,从而使得应用程序能够与操作系统进行交互,完成各种任务。