在 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 操作系统提供的基础接口,程序通过调用它们来执行系统级操作,从而使得应用程序能够与操作系统进行交互,完成各种任务。
877

被折叠的 条评论
为什么被折叠?



