Linux系统编程手册PDF,如何获取并有效利用这份资源?
- 行业动态
- 2024-11-08
- 2255
Linux系统编程手册PDF提供了全面的指南,涵盖从基础到高级的 Linux系统编程概念和实践,是开发者必备的参考资料。
Linux系统编程手册pdf
背景介绍
Linux系统编程是指利用系统调用和库函数对Linux操作系统进行控制与操作的过程,相较于其他高级语言,系统编程可以更直接地控制系统资源,实现高效的程序设计,本手册旨在为开发者提供详细的Linux系统编程指南,涵盖文件操作、进程管理、线程、网络编程等内容。
主要功能
文件操作
文件读写:open(),read(),write(),close()
文件权限管理:chmod(),fchmod(),chown()
文件状态获取:stat(),fstat()
进程管理
进程创建:fork()
进程终止:exit(),_exit(),wait(),waitpid()
执行新程序:exec(),execve(),execlp(),execvp()
信号处理
信号发送:kill(),raise()
信号捕获:signal(),sigaction()
信号集操作:sigemptyset(),sigaddset(),sigprocmask()
线程管理
线程创建:pthread_create()
线程同步:互斥锁(pthread_mutex_t)、条件变量(pthread_cond_t)
线程属性:pthread_attr_t
网络编程
套接字创建与操作:socket(),bind(),listen(),accept(),connect()
数据传输:send(),recv()
地址转换:inet_addr(),inet_ntoa(),getaddrinfo()
详细介绍
文件操作
文件读写
文件操作是Linux系统编程的基础之一,常用函数如下:
open(): 打开文件
int open(const char *pathname, int flags);
read(): 从文件读取数据
ssize_t read(int fd, void *buf, size_t count);
write(): 向文件写入数据
ssize_t write(int fd, const void *buf, size_t count);
close(): 关闭文件
int close(int fd);
文件权限管理
文件权限管理对于系统安全非常重要,常用函数如下:
chmod(): 改变文件权限
int chmod(const char *path, mode_t mode);
fchmod(): 改变打开文件的权限
int fchmod(int fd, mode_t mode);
chown(): 改变文件所有者
int chown(const char *path, uid_t owner, gid_t group);
文件状态获取
获取文件状态信息有助于了解文件的详细情况,常用函数如下:
stat(): 获取文件状态信息
int stat(const char *path, struct stat *buf);
fstat(): 获取打开文件的状态信息
int fstat(int fd, struct stat *buf);
进程管理
进程创建与终止
进程管理是系统编程的核心内容之一,常用函数如下:
fork(): 创建新进程
pid_t fork(void);
exit(): 终止进程
void exit(int status);
_exit(): 立即终止进程
void _exit(int status);
wait(): 等待子进程结束
pid_t wait(int *status);
waitpid(): 等待指定子进程结束
pid_t waitpid(pid_t pid, int *status, int options);
执行新程序
执行新程序需要使用exec族函数,常用函数如下:
execl(): 执行程序,参数列表形式
int execl(const char *path, const char *arg, ... /* (char *) NULL */);
execle(): 执行程序,环境变量列表形式
int execle(const char *path, const char *arg, ..., char *const envp[]);
execv(): 执行程序,参数数组形式
int execv(const char *path, char *const argv[]);
execvp(): 执行程序,参数数组形式,自动搜索路径
int execvp(const char *file, path, char *const argv[]);
信号处理
信号发送与捕获
信号处理用于应对异步事件,常用函数如下:
kill(): 发送信号给进程或进程组
int kill(pid_t pid, int sig);
raise(): 向自身进程发送信号
int raise(int sig);
signal(): 设置信号处理函数(不推荐)
void (*signal(int sig, void (*handler)(int)))(int);
sigaction(): 设置信号处理函数(推荐)
int sigaction(int sig, const struct sigaction *act, struct sigaction *oldact);
信号集操作
信号集操作用于屏蔽或解除特定信号,常用函数如下:
sigemptyset(): 初始化信号集为空
int sigemptyset(sigset_t *set);
sigaddset(): 添加信号到信号集
int sigaddset(sigset_t *set, int signum);
sigprocmask(): 阻塞或解除信号集
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
线程管理
线程创建与同步
线程是轻量级进程,适用于并发任务,常用函数如下:
pthread_create(): 创建线程
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
pthread_join(): 等待线程结束
int pthread_join(pthread_t thread, void **retval);
pthread_mutex_init(): 初始化互斥锁
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);
pthread_mutex_lock(): 加锁互斥锁
int pthread_mutex_lock(pthread_mutex_t *mutex);
pthread_mutex_unlock(): 解锁互斥锁
int pthread_mutex_unlock(pthread_mutex_t *mutex);
pthread_cond_init(): 初始化条件变量
int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr);
pthread_cond_wait(): 等待条件变量
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
pthread_cond_broadcast(): 广播唤醒所有等待线程
int pthread_cond_broadcast(pthread_cond_t *cond);
pthread_cond_signal(): 唤醒一个等待线程
int pthread_cond_signal(pthread_cond_t *cond);
网络编程
套接字创建与操作
网络编程涉及数据的发送和接收,常用函数如下:
socket(): 创建套接字
int socket(int domain, int type, int protocol);
bind(): 绑定套接字到地址
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
listen(): 监听连接请求
int listen(int sockfd, int backlog);
accept(): 接受连接请求
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
connect(): 发起连接请求
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
send(): 发送数据
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
recv(): 接收数据
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
sendto(): 发送数据到指定地址(UDP)
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);
recvfrom(): 接收数据并保存源地址(UDP)
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);
inet_addr(): IP地址转换函数(字符串转数值)
in_addr_t inet_addr(const char *cp);
inet_ntoa(): IP地址转换函数(数值转字符串)
const char *inet_ntoa(in_addr_t in);
getaddrinfo(): 获取地址信息(通用接口)
int getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res);
getnameinfo(): 获取名称信息(通用接口)
int getnameinfo(const struct sockaddr *sa, socklen_t salen, char *host, size_t hostlen, char *serv, size_t servlen, int flags);
select(): 多路复用I/O监控函数(非阻塞操作)
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
poll(): I/O多路复用监控函数(非阻塞操作)
int poll(struct pollfd *fds, nfds_t nfds, int timeout);
epoll(): I/O多路复用监控函数(高效非阻塞操作)
int epoll_create(int size); // 创建epoll实例 int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event); // 注册/修改/删除文件描述符监控事件类型等操作;op值对epoll实例进行相应操作,如EPOLL_CTL_ADD表示注册新的fd到epoll监控队列中,EPOLL_CTL_MOD表示修改已注册的fd的监控事件类型,EPOLL_CTL_DEL表示从epoll监控队列中删除指定的fd,event结构体包含所要控制的文件描述符fd以及与其相关的事件类型events,将某个文件描述符fd以EPOLLIN事件类型注册到epoll实例epfd中,可编写代码如下:struct epoll_event ev;ev.events = EPOLLIN;ev.data.fd = fd;::epoll_ctl(epfd, EPOLL_CTL_ADD, &ev);//返回值为0表示成功,-1表示失败,如果执行成功,则该文件描述符将被添加到epoll的监控队列中,并关联相应的事件类型events,如果执行失败,则可以通过errno获取错误原因,注意:在使用epoll时需要先创建一个epoll实例,然后才能调用epoll_ctl函数来对文件描述符进行控制,在不再需要继续使用时,应该使用close()函数关闭epoll实例以释放相关资源。
本站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本站,有问题联系侵删!
本文链接:https://www.xixizhuji.com/fuzhu/6371.html