![](https://img-blog.csdnimg.cn/20190922163228961.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
linux/UNIX系统编程手册读书笔记
linux/UNIX系统编程手册读书笔记,主要涉及linux的应用层编程技术
达达兔儿
喜欢技术,热爱生活,追求自由!
展开
-
文件IO和标准I/O(缓冲IO)概念讲解、以及相关函数使用对比分析
文件IO和标准IO3.1 文件I/O文件I/O:文件I/O称之为不带缓存的IO(unbuffered I/O)。不带缓存指的是每个read,write都调用内核中的一个系统调用,数据直接在用户空间缓冲区和内核高速缓冲区之间复制read()和write()系统调用在操作磁盘文件的时候不会直接发起磁盘访问,而是仅仅在用户空间缓冲区和内核缓冲区高速缓存之间复制数据,复制完毕,系统调用就会结...原创 2019-04-20 20:44:52 · 936 阅读 · 1 评论 -
管道和FIFO概念以及相关函数(pipe、mkfifo)介绍
管道和FIFO1.1管道$ ls | wc -l 命令的运行过程:这里执行ls命令的进程把标准输出重定向到了管道的输入端,执行wc命令的进程把标准输入重定向到了管道的输出端,实际上这两个进程并不知道管道的存在,它只知道从标准输入和标准输出读取和写入数据,具体实现,后面说出来shell是父进程,它fork了两个同辈份的进程,分别执行ls和wc命令管道传输的是字节流:字节流...原创 2019-09-10 19:12:10 · 989 阅读 · 0 评论 -
System V IPC概念以及常用数据结构和命令介绍
System V IPC介绍1.1 概述System V IPC函数接口总览:每种System V IPC机制都有一个相关的get系统调用(msgget等),给定一个key参数类似于文件名,get调用完成以下功能:使用给定的key值创建一个新IPC对象并返回唯一的标识符(整数)来标识该对象返回一个拥有给定的key的既有IPC对象的标识符System V IPC对象标...原创 2019-09-10 19:15:55 · 423 阅读 · 0 评论 -
System V 消息队列概念以及相关函数(msgget、msgsnd、msgrcv、msgctl)介绍
System V 消息队列消息队列是半双工的通信方式1.1 创建一个消息队列消息队列的特点:消息只能一条的读取,不能多读取,也不能少读取,每条消息有一个类型,可以按照消息的类型读取创建或者打开一条消息:/*************************函数功能:创建或者打开一条消息队列返回值: If successful, the return value will b...原创 2019-09-10 19:23:00 · 488 阅读 · 0 评论 -
System V 信号量概念以及相关函数(semget、semctl、semop、semtimedop)介绍
System V 信号量1.1 基本的API介绍semget函数功能:创建或者打开一个信号量集合返回值:成功返回信号量集合的标识符,错误返回-1,并且设置errno值函数原型:#include <sys/types.h>#include <sys/ipc.h>#include <sys/sem.h>int semget(key_t ...原创 2019-09-10 19:29:37 · 2597 阅读 · 0 评论 -
System V共享内存概念以及相关函数(shmget、shmat、shmdt、shmctl)介绍
System V共享内存共享内存的特点:共享内存允许多个进程共享一块内存段共享内存(一块物理内存)会被映射到进程地址空间,成为虚拟内存的一部分该IPC机制无需内核的介入相比于其他IPC机制,该技术没有内核空间和用户空间的数据交换,速度更快1.1 创建或者打开一个共享内存段函数功能:创建一个共享内存段或者获取一个既有共享内存段的标识符,新创建的共享内存段会被初始化为0...原创 2019-09-10 19:33:18 · 630 阅读 · 0 评论 -
Linux系统:内存映射概念以及相关函数(mmap、munmap、msync)介绍
内存映射1.1 基本概念内存映射根据种类分为:文件映射:将一个文件的一部分直接映射到虚拟进程地址空间中,虚拟进程地址空间会对应一部分内存RAM分页共享文件映射:在同一个文件上面的映射变更,对其它共享该文件映射的进程是可见的(应为这个时候多个进程共享同一个物理内存分页),并且会把变更反映到磁盘文件上fork创建的子进程会继承父进程的映射关系,并且共享相同的物理内存分页对应的内存分...原创 2019-09-10 19:38:36 · 1147 阅读 · 0 评论 -
linux SOCKET:internet Domain通信编程实例(inet_ntop和inet_aton())新老API对比实现
SOCKET:Internet Domain1.1 Internet domain socket流socket 是基于TCP之上的,它们提供了可靠的双向字节流通信信道数据报socket是基于UDP之上的,UDP socket和UNIX domain差别如下UNIX domain数据报socket是可靠的而UDP socket是不可靠的在一个UNIX domain数据报socke...原创 2019-09-10 19:45:30 · 308 阅读 · 0 评论 -
SOCKET通信:服务器设计类型总结
SOCKET:服务器设计1.1 迭代服务器和并发服务器迭代服务器:该服务器每次只能处理一个客户端,只有当完全处理完一个客户端之后,才能处理下一个客户端并发服务器:该类型的服务器可以同时处理多个客服端的请求,传统的并发服务器是在父进程当中,为一个新的客户端请求开辟一个新的进程,当然也可以用新的线程1.2 迭代型 UDP echo服务器echo服务支持UDP和TCP,工作在端口号7上,...原创 2019-09-10 19:51:32 · 370 阅读 · 0 评论 -
linux socket编程:shutdown、recv、send、sendfile、getsockname、getpeername等函数和netstat命令、TIME_WAIT 状态详细介绍
SOCKET:高级主题1.1 流式套接字上的部分读和部分写套接字上可用的数据比实际请求的数据少传输过程中系统调用被信号处理打断套接字使用非阻塞模式,可能只传输了一部分传输未完成产生一个异步错误,例如一方连接关闭解决办法:全部读函数:/* Read 'n' bytes from 'fd' into 'buf', restarting after partial...原创 2019-09-10 20:01:38 · 463 阅读 · 0 评论 -
linux系统进程间通信技术总结与比较
进程间通信简介1.1 IPC工具分类及通信工具IPC通信总结图:数据传输工具:要求用户空间和内核空间进行两次交换,写入的时候数据从用户空间到内核空间,读取的时候,数据从内核空间到用户空间字节流:数据之间没有分割,每个读操作可以从IPC工具中读取任意数量的字节,不管写者写入的块大小是多少消息:以分隔符分隔,每次的读操作只能读取写者写入的一整条消息,不能多读,也不能少读如果数据...原创 2019-09-10 19:07:29 · 108 阅读 · 0 评论 -
linux系统:共享库概念以及创建步骤总结
共享库基础1.1 静态库静态库也称为归档文件,可以理解为一组常用的目标文件被存放在一起,然后打了一个包,在链接阶段,连接器LD会自动链接该库文件静态库的名字格式:libname.aar -r 库名字 目标文件1 目标文件2:将目标文件添加到库中,并且替换掉相同名字的目标文件ar -tv 库名字:查看库中所有目标文件的详细信息ar -d 库名字 目标文件:从库中删除目标文件这个模块...原创 2019-08-29 15:56:29 · 320 阅读 · 0 评论 -
linux系统守护进程(daemon)创建与使用注意事项
DAEMON1.1 概述一个daemon进程一般在系统启动的时候创建,在系统运行结束的时候关闭它在后台运行的时候,通常独立于控制终端运行,控制终端的缺失确保了内核永远不会向这个守护进程发送任何控制信号1.2 创建一个daemon执行一个fork(),父进程退出,子进程成为init进程的子进程,然后继续执行,这样做的原因,一是当父进程退出之后,命令行提示符会显示出来,但是子进程会在...原创 2019-08-29 15:42:00 · 1036 阅读 · 0 评论 -
linux系统进程凭证:user ID和group ID概念详解
进程凭证1 实际用户ID(real user ID)和实际组ID(real group ID)实际用户ID和实际组ID确定了进程所属的用户或者组,登录shell从/etcpasswd下读取相应用户密码记录的第三或者第四字段,置为实际用户ID和实际组ID,子进程会从父进程那里继承这些ID2 有效用户ID(effective user ID)和有效组ID(effetive ID)进程在...原创 2019-04-20 20:52:31 · 1346 阅读 · 0 评论 -
linux信号概念以及相关函数(signal()、kill()、sigaction())介绍
信号:基本概念1 概念和概述信号是事件发生时候对进程的通知机制,也可以称为软件中断进程可以给自身发送信号,也可以给其他进程发送信号,但是通常信号都是由内核发送出来的内核产生信号的各类事件举例:硬件发生异常:比如访问只读内存区域,被0除用户键入了能够产生信号的终端特殊字符,比如Control-C发生了软件事件:比如定时器到期信号都定义了一个唯一的小整数,在/usr...原创 2019-04-20 21:03:57 · 388 阅读 · 0 评论 -
linux系统:信号处理器函数的设计原则
信号:信号处理器函数1 设计信号处理函数信号处理函数中设置一个全局标志变量并且退出,主程序对此标志进行周期性检查,一旦标志置位,就执行相应的动作,如果主程序因为I/O状态无法无法周期性检查,那么可以在信号处理函数中向一个专用管道写入数据,主程序中检测该管道的读端的文件描述符信号处理函数执行完成相应的任务之后,终止进程或者非本地跳转,将栈解开,返回主程序1.1 可重入函数和异步信号安全...原创 2019-04-20 21:10:08 · 816 阅读 · 0 评论 -
linux系统进程概念以及相关函数(vfork、fork、exec)介绍
进程相关进程的创建fork之后,子进程共享父进程所有的文件描述符副本vfork()函数和fork()的区别:子进程共享父进程的内存,直至成功执行exec()或者调用_exit()子进程调用exec()或者_exit()之前,将暂停执行父进程所以建议还是使用fork(),现在fork实现采用了写时赋值技术,这时候子进程只是简单的复制了进程地址空间中的用户空间部分,内核地址空间...原创 2019-04-20 21:13:39 · 218 阅读 · 0 评论 -
linux系统:线程概念以及相关函数(pthread_self、pthread_detach、pthread_join、pthread_equal)介绍
线程介绍同时执行四个线程的进程:线程共享的一些数据:终止线程:在线程里面调用return 可以终止线程线程里面,不管那个线程的子函数调用pthread_exit(),该线程都会退出调用pthread_cancel取消线程任意线程调用了exit,或者主线程执行了return 语句,都会导致进程中所有线程停止主线程中调用pthread_exit(),不会影响进程中的其...原创 2019-04-20 21:17:38 · 597 阅读 · 0 评论 -
linux系统线程同步技术(互斥、条件变量、信号量)总结
线程同步1.1 互斥量互斥量的原理:静态分配的互斥量:/**********************静态分配的互斥量******************/pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;pthread_mutex_lock(&mtx); //原子操作 //临界资源pthread_mutex_...原创 2019-08-29 15:17:14 · 148 阅读 · 0 评论 -
线程安全和线程存储
线程安全和线程存储和线程取消线程安全函数:若函数可同时供多个线程安全调用,则称之为线程安全函数,如果不是线程安全函数,则不能并发调用线程取消:向一个线程发送一个请求,要求其立即退出/******************************函数功能:取消指定线程ID的的线程返回值: On success, pthread_cancel() returns 0; on erro...原创 2019-08-29 15:24:14 · 119 阅读 · 0 评论 -
线程和信号、线程的进程之间的控制的关系以及线程实现模型说明
线程相关更多细节介绍线程栈:创建线程的时候,每个线程都有一个属于自己的线程栈,且大小固定,在linux/X86架构上面,除去主线程外,堆栈的默认大小为2MB,当然也可以创建线程的时候,通过相关函数来改变1.1 线程和信号的关系线程和信号:进程中某一个线程收到了未经处理的信号,且其默认动作是stop火terminate,那么将停止或者终止所有该进程的所有线程(进程层面)如果某一个...原创 2019-08-29 15:28:41 · 354 阅读 · 0 评论 -
进程组、会话、作业控制
进程组、会话、作业控制1.1 概述进程组:由一个或多个共享一个进程组标识号(PGID)的进程组成,PGID和PID一样是一个pid_t类型的整数,一个进程组拥有一个进程组首进程,该进程创建了该进程组,其进程ID与进程组ID一样,新进程会继承父进程所属的进程组ID。每一个进程组都有一个生命周期,其生命周期从进程组首进程创建该组开始,直到其中的最后一个进程退出为止,一个进程可能会因为结束而退出...原创 2019-08-29 15:35:11 · 422 阅读 · 0 评论 -
linux I/O多路复用:select、poll、信号驱动I/O、epoll等技术使用、以及性能分析详解
其它IO模型1.1 整体性能分析使用I/O多路复用、信号驱动I/O以及epoll的目标:同时检查多个文件描述符,看他们是否准备好了执行I/O操作(准确来说是看I/O操作是否可以以非阻塞的形式执行)文件描述符就绪状态转换的一些可能的触发原因:输入数据到达套接字连接建立完成满载的套接字发送缓冲区有了剩余空间I/O模型的一些方案:I/O多路复用允许进程检查同时检查多个文...原创 2019-09-10 20:08:54 · 425 阅读 · 0 评论