【Linux】常见的系统调用 函数和功能简单总结
什么是系统调用?

当我们从用户态进行系统调用时,实际上是通过一个软中断(例如int 0x80)或专门的系统调用指令(如sysenter、syscall)陷入内核态,然后执行内核中预先设定的系统调用处理程序。
系统调用按照功能分类
错误处理
头文件:string.h
系统调用:char* strerror(int errnum)
功能:将整数形式的错误号转换为有意义的字符串
头文件:stdio.h
系统调用:void perror(char const* tag)
功能:在标准出错设备上打印最近一次函数调用的错误信息
内存管理
头文件:sys/mman.h
系统调用:void* mmap(void* start, size_t length, int prot, int flags, int fd, off_t offset)
功能:建立虚拟内存到物理内存或磁盘文件的映射
头文件:sys/mman.h
系统调用:int munmap(void* start, size_t length)
功能:解除虚拟内存到物理内存或磁盘文件的映射
头文件:unistd.h
系统调用:void* sbrk(intptr_t increment)
功能:以相对方式分配和释放虚拟内存
头文件:unistd.h
系统调用:int brk(void* end_data_segment)
功能:以绝对方式分配和释放虚拟内存
文件管理和文件系统
头文件:fcntl.h
系统调用:int open(char const* pathname, int flags, mode_t mode)
功能:打开已有的文件或创建新文件
头文件:unistd.h
系统调用:int close(int fd)
功能:关闭处于打开状态的文件描述符
头文件:unistd.h
系统调用:ssize_t write(int fd, void const* buf, size_t count)
功能:向指定的文件写入数据
头文件:unistd.h
系统调用:ssize_t read(int fd, void* buf, size_t count)
功能:从指定的文件中读取数据
头文件:unistd.h
系统调用:off_t lseek(int fd, off_t offset, int whence)
功能:人为调整文件读写位置
头文件:unistd.h
系统调用:int dup(int oldfd)
功能:复制文件描述符表的特定条目到最小可用项
头文件:unistd.h
系统调用:int dup2(int oldfd, int newfd)
功能:复制文件描述符表的特定条目到指定项
头文件:unistd.h
系统调用:int access(char const* pathname, int mode)
功能:判断当前进程是否可以对某个给定的文件执行某种访问
头文件:unistd.h
系统调用:int truncate(char const* path, off_t length)
int ftruncate(int fd, off_t length)
功能:修改指定文件的大小
头文件:fcntl.h
系统调用:int fcntl(int fd, F_SETLK/F_SETLKW, struct flock* lock)
功能:加解锁
头文件:sys/stat.h
系统调用:int stat(char const* path, struct stat* buf)
int fstat(int fd, struct stat* buf)
int lstat(char const* path, struct stat* buf)
功能:从i节点中提取文件的元数据,即文件的属性信息
头文件:sys/mman.h
系统调用:void* mmap(void* start, size_t length, int prot, int flags, int fd, off_t offset)
功能:建立虚拟内存到物理内存或磁盘文件的映射
头文件:sys/mman.h
系统调用:int munmap(void* start, size_t length)
功能:解除虚拟内存到物理内存或磁盘文件的映射
进程管理
头文件:unistd.h
系统调用:pid_t fork(void)
功能:创建调用进程的子进程
头文件:stdlib.h
系统调用:void exit(int status)
功能:令进程终止
头文件:stdlib.h
系统调用:int atexit(void (*function)(void))
功能:function函数指针,指向退出处理函数
头文件:stdlib.h
系统调用:int on_exit(void (*function)(int, void*), void* arg)
功能:注册退出处理函数
头文件:unistd.h
系统调用:void _exit(int status)
功能:调用_exit函数令进程终止
头文件:stdlib.h
系统调用:void _Exit(int status)
功能:调用_Exit函数令进程终止
头文件:stdlib.h
系统调用:void abort(void)
功能:向调用进程发送SIGABRT(6)信号,该信号默认情况下可使进程结束
头文件:sys/wait.h
系统调用:pid_t wait(int* status)
功能:等待并回收任意子进程
头文件:sys/wait.h
系统调用:pid_t waitpid(pid_t pid, int* status, int options)
功能:等待并回收任意或特定子进程
头文件:unistd.h
系统调用:int execve(const char* path, char* const argv[], char* const envp[])
功能:创建新进程
头文件:stdlib.h
系统调用:int system(const char* command)
功能:执行shell命令
信号(软中断)
信号是提供异步事件处理机制的软件中断。
这些异步事件可能来自硬件设备,如用户同时按下了Ctrl键和C键,也可能来自系统内核,如试图访问尚未映射的虚拟内存,又或者来自用户进程,如尝试计算整数除以0的表达式。
进程之间可以相互发送信号,这使信号成为一种进程间通信的基本手段。
头文件:signal.h
系统调用:typedef void (*sighandler_t)(int)
sighandler_t signal(int signum, sighandler_t handler)
功能:设置调用进程针对特定信号的处理方式
头文件:signal.h
系统调用:int kill(pid_t pid, int signum)
功能:向指定的进程发送信号
头文件:signal.h
系统调用:int raise(int signum)
功能:向调用进程自己发送信号
头文件:unistd.h
系统调用:int pause(void)
功能:无限睡眠
头文件:unistd.h
系统调用:unsigned int sleep(unsigned int seconds)
功能:有限睡眠
头文件:unistd.h
系统调用:int usleep(useconds_t usec)
功能:更精确的有限睡眠
头文件:unistd.h
系统调用:unsigned int alarm(unsigned int seconds)
功能:设置闹钟
头文件:signal.h
系统调用:int sigfillset(sigset_t* sigset)
功能:填满信号集,即将信号集的全部信号位置1
头文件:signal.h
系统调用:int sigemptyset(sigset_t* sigset)
功能:清空信号集,即将信号集的全部信号位清0
头文件:signal.h
系统调用:int sigaddset(sigset_t* sigset, int signum)
功能:加入信号,即将信号集中与指定信号编号对应的信号位置1
头文件:signal.h
系统调用:int sigdelset(sigset_t* sigset, int signum)
功能:删除信号,即将信号集中与指定信号编号对应的信号位清0
头文件:signal.h
系统调用:int sigismember(const sigset_t* sigset, int signum)
功能:判断信号集中是否有某信号,即检查信号集中与指定信号编号对应的信号位是否为1
头文件:signal.h
系统调用:int sigprocmask(int how, const sigset_t* sigset, sigset_t* oldset)
功能:设置调用进程的信号掩码
头文件:signal.h
系统调用:int sigpending(sigset_t* sigset)
功能:获取调用进程的未决信号集
进程间通信
头文件:sys/stat.h
系统调用:int mkfifo(char const* pathname, mode_t mode)
功能:创建有名管道
头文件:unistd.h
系统调用:int pipe(int pipefd[2])
功能:创建无名管道
头文件:sys/ipc.h
系统调用:key_t ftok(const char* pathname, int proj_id)
功能:用于合成一个键(IPC对象的键)
头文件:sys/shm.h
系统调用:int shmget(key_t key, size_t size, int shmflg)
功能:创建新的或获取已有的共享内存
头文件:sys/shm.h
系统调用:void* shmat(int shmid, void const* shmaddr, int shmflg)
功能:加载共享内存,将物理内存中的共享区域映射到进程用户空间的虚拟内存中
头文件:sys/shm.h
系统调用:int shmdt(void const* shmaddr)
功能:卸载共享内存
头文件:sys/shm.h
系统调用:int shmctl(int shmid, IPC_RMID, NULL)
功能:销毁共享内存
头文件:sys/msg.h
系统调用:int msgget(key_t key, int msgflg)
功能:创建新的或获取已有的消息队列
头文件:sys/msg.h
系统调用:int msgsnd(int msgid, void const* msgp, size_t msgsz, int msgflg)
功能:发送消息
头文件:sys/msg.h
系统调用:int msgrcv(int msgid, void* msgp, size_t msgsz, long msgtyp, int msgflg)
功能:接收消息
头文件:sys/msg.h
系统调用:int msgctl(int msgid, IPC_RMID, NULL)
功能:销毁消息队列
网络管理
头文件:sys/socket.h
系统调用:int socket(int domain, int type, int protocol)
功能:创建套接字
头文件:sys/socket.h
系统调用:int bind(int socket, struct sockaddr const* addr, socklen_t addrlen)
功能:将套接字和本地的地址结构绑定在一起
头文件:sys/socket.h
系统调用:int connect(int sockfd, struct sockaddr const* addr, socklen_t addrlen)
功能:将套接字和对方的地址结构连接在一起
头文件:sys/socket.h
系统调用:int listen(int sockfd, int backlog)
功能:启动侦听:在指定套接字上启动对连接请求的侦听功能
头文件:sys/socket.h
系统调用:int accept(int sockfd, struct sockaddr* addr, socklen_t* addrlen)
功能:等待并接受连接请求,在指定套接字上阻塞,知道连接建立完成
头文件:sys/socket.h
系统调用:ssize_t recv(int sockfd, void* buf, size_t count, int flags)
功能:接收数据
头文件:sys/socket.h
系统调用:ssize_t send(int sockfd, void const* buf, size_t count, int flags)
功能:发送数据
头文件:sys/socket.h
系统调用:ssize_t recvfrom(int sockfd, void* buf, size_t count, int flags, struct sockaddr* src_addr, socklen_t* addrlen)
功能:从哪里接收数据
头文件:sys/socket.h
系统调用:ssize_t sendto(int sockfd, void const* buf, size_t count, int flags, struct sockaddr const* dest_addr, socklen_t addrlen)
功能:发送数据到哪里
线程管理
头文件:pthread.h
系统调用:int pthread_create(pthread_t* tid, pthread_attr_t const* attr,
void* (*start_routine)(void*), void* arg)
功能:创建新线程
头文件:pthread.h
系统调用:int pthread_join(pthread_t tid, void** retval)
功能:等待子线程终止,即其线程过程函数返回,并与之会和,同时回收该线程的资源
头文件:pthread.h
系统调用:int pthread_detach(pthread_t tid)
功能:使指定的线程进入分离状态
头文件:pthread.h
系统调用:pthread_t pthread_self(void)
功能:返回调用线程的(POSIX线程库的)TID
头文件:sys/syscall.h
系统调用:long int syscall(SYS_gettid)
功能:返回调用线程的(系统内核的)TID
头文件:pthread.h
系统调用:int pthread_equal(pthread_t t1, pthread_t t2)
功能:若两个参数所表示的TID相等返回非零,否则返回0
头文件:pthread.h
系统调用:int pthread_mutex_init(pthread_mutex_t* mutex, pthread_mutexattr_t const* attr)
功能:初始化互斥锁
头文件:pthread.h
系统调用:int pthread_mutex_destory(pthread_mutex_t* mutex)
功能:销毁互斥锁
头文件:pthread.h
系统调用:int pthread_mutex_lock(pthread_mutex_t* mutex)
功能:锁定互斥锁
头文件:pthread.h
系统调用:int pthread_mutex_unlock(pthread_mutex_t* mutex)
功能:解锁互斥体
头文件:pthread.h
系统调用:int pthread_cond_init(pthread_cond_t* cond, const pthread_condattr_t* attr)
功能:初始化条件变量
头文件:pthread.h
系统调用:int pthread_cond_destory(pthread_cond_t* cond)
功能:销毁条件变量
头文件:pthread.h
系统调用:int pthread_cond_wait(pthread_cond_t* cond, pthread_mutex_t* mutex)
功能:睡入条件变量
头文件:pthread.h
系统调用:int pthread_cond_signal(pthread_cond_t* cond)
功能:唤醒在条件变量中睡眠的一个线程
