Linux系统编程手册PDF,如何获取并有效利用这份资源?

Linux系统编程手册PDF提供了全面的指南,涵盖从基础到高级的Linux系统编程概念和实践,是开发者必备的参考资料。

Linux系统编程手册pdf

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);

文件权限管理

Linux系统编程手册PDF,如何获取并有效利用这份资源?

文件权限管理对于系统安全非常重要,常用函数如下:

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(): 添加信号到信号集

Linux系统编程手册PDF,如何获取并有效利用这份资源?

    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.kdun.com/ask/1273997.html

本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。

(0)
未希新媒体运营
上一篇 2024-11-08 21:46
下一篇 2024-11-08 21:47

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

产品购买 QQ咨询 微信咨询 SEO优化
分享本页
返回顶部
云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购 >>点击进入