系统调用有哪些函数
系统调用是操作系统提供给用户程序的一组“特殊”的函数接口,允许用户程序请求操作系统执行某些低级服务。这些服务通常涉及对硬件的直接操作或访问受保护的内核资源。以下是一些常见的系统调用函数,主要基于Unix/Linux环境:
一、文件与设备管理
-
open()
- 功能:打开文件或设备。
- 参数:
pathname
:文件的路径及文件名。flags
:打开文件的行为标志,如O_RDONLY
(只读)、O_WRONLY
(只写)、O_RDWR
(读写)等。mode
(可选):文件权限,当文件不存在且需要创建时指定。
- 返回值:成功时返回文件描述符,失败时返回-1并设置
errno
。
-
close()
- 功能:关闭已打开的文件或设备。
- 参数:
fd
,文件描述符。 - 返回值:成功时返回0,失败时返回-1并设置
errno
。
-
read()
- 功能:从文件或设备读取数据。
- 参数:
fd
:文件描述符。buf
:数据缓冲区。count
:要读取的字节数。
- 返回值:实际读取的字节数,如果到达文件末尾则返回0,失败时返回-1并设置
errno
。
-
write()
- 功能:向文件或设备写入数据。
- 参数:
fd
:文件描述符。buf
:数据缓冲区。count
:要写入的字节数。
- 返回值:实际写入的字节数,失败时返回-1并设置
errno
。
-
lseek()
- 功能:移动文件读写指针。
- 参数:
fd
:文件描述符。offset
:偏移量。whence
:偏移量的基准位置,如SEEK_SET
(文件开头)、SEEK_CUR
(当前位置)、SEEK_END
(文件末尾)。
- 返回值:成功时返回新的文件偏移量,失败时返回-1并设置
errno
。
-
unlink()
- 功能:删除文件。
- 参数:
pathname
,文件的路径及文件名。 - 返回值:成功时返回0,失败时返回-1并设置
errno
。
-
mkdir()
- 功能:创建目录。
- 参数:
pathname
:目录的路径及名称。mode
:目录权限。
- 返回值:成功时返回0,失败时返回-1并设置
errno
。
-
rmdir()
- 功能:删除目录。
- 参数:
pathname
,目录的路径及名称。 - 返回值:成功时返回0,失败时返回-1并设置
errno
。
-
stat()
- 功能:获取文件的状态信息。
- 参数:
pathname
:文件的路径及文件名。buf
:用于存储文件状态信息的缓冲区。
- 返回值:成功时返回0,失败时返回-1并设置
errno
。
-
ioctl()
- 功能:设备控制接口,用于设备的各种操作。
- 参数:
fd
:文件描述符。request
:控制命令。arg
:控制命令的参数。
- 返回值:成功时返回0,失败时返回-1并设置
errno
。
二、进程管理
-
fork()
- 功能:创建一个新的进程,称为子进程。
- 参数:无。
- 返回值:在父进程中返回子进程的PID,在子进程中返回0,失败时返回-1并设置
errno
。
-
execve()
- 功能:在当前进程中执行一个新程序,替换当前进程的代码段、数据段和堆栈段。
- 参数:
pathname
:要执行的程序的路径及名称。argv
:传递给新程序的命令行参数数组。envp
:传递给新程序的环境变量数组。
- 返回值:成功时不会返回,失败时返回-1并设置
errno
。
-
wait()
- 功能:等待子进程终止。
- 参数:
status
:用于存储子进程终止状态的指针。
- 返回值:成功时返回子进程的PID,失败时返回-1并设置
errno
。
-
exit()
- 功能:终止进程的执行,并返回状态码给父进程。
- 参数:
status
,进程终止状态码。 - 返回值:不返回。
-
getpid()
- 功能:获取当前进程的进程ID。
- 参数:无。
- 返回值:当前进程的进程ID。
-
getppid()
- 功能:获取当前进程的父进程的进程ID。
- 参数:无。
- 返回值:父进程的进程ID。
-
kill()
- 功能:向进程发送信号。
- 参数:
pid
:进程ID或进程组ID。sig
:要发送的信号。
- 返回值:成功时返回0,失败时返回-1并设置
errno
。
三、内存管理
-
brk()
- 功能:改变数据段的结束位置,通常用于管理堆内存。
- 参数:
end_data
,数据段新的结束地址。 - 返回值:成功时返回0,失败时返回-1并设置
errno
。
-
mmap()
- 功能:将文件或设备映射到内存,实现文件的内存映射I/O。
- 参数:
addr
:建议的映射地址。len
:映射区域的长度。prot
:映射区域的保护标志。flags
:映射标志。fd
:文件描述符。offset
:文件偏移量。
- 返回值:成功时返回映射区域的起始地址,失败时返回
MAP_FAILED
并设置errno
。
-
munmap()
- 功能:解除文件或设备的内存映射。
- 参数:
addr
:映射区域的起始地址。len
:映射区域的长度。
- 返回值:成功时返回0,失败时返回-1并设置
errno
。
-
mprotect()
- 功能:设置内存保护属性,控制对内存区域的访问权限。
- 参数:
addr
:内存区域的起始地址。len
:内存区域的长度。prot
:新的保护标志。
- 返回值:成功时返回0,失败时返回-1并设置
errno
。
四、网络通信
-
socket()
- 功能:创建一个新的套接字,用于网络通信。
- 参数:
domain
:协议族。type
:套接字类型。protocol
:协议类型。
- 返回值:成功时返回套接字文件描述符,失败时返回-1并设置
errno
。
-
bind()
- 功能:将套接字绑定到本地地址和端口。
- 参数:
sockfd
:套接字文件描述符。addr
:指向本地地址结构的指针。addrlen
:地址结构的长度。
- 返回值:成功时返回0,失败时返回-1并设置
errno
。
-
listen()
- 功能:使套接字进入监听状态,准备接受连接请求。
- 参数:
sockfd
:套接字文件描述符。backlog
:监听队列的最大长度。
- 返回值:成功时返回0,失败时返回-1并设置
errno
。
-
accept()
- 功能:接受连接请求,建立新的连接。
- 参数:
sockfd
:监听套接字文件描述符。