
UNIX环境高级编程
UNIX环境高级编程
周厚平
Linux + 安卓 = 标配
展开
-
16.3.1 字节序 测试
16.3.1 字节序(1)概述 1.字节序是一个处理器架构特性,用于指定数据内部的字节如何排序 2.大段:像存储字符串一样,数据的高字节存储在内存的低字节中。 3.小端:与大段相反 4.有的操作系统既可以配置为大端,也可以配置为小端 5.TCP/IP协议栈使用大端字节序(2)各平台的字节序 --------------------------- 操作系统 字节序 --------------------------- FreeBSD8.0 小端 Linux3.2.0 小端.原创 2020-08-03 10:16:58 · 321 阅读 · 0 评论 -
systemV 共享内存 测试
15.8 共享内存(1)概述 1.共享内存允许两个或多个进程共享一个给定的存储区。 2.共享内存是最快的一种IPC方式。 1.因为数据不需要再客户进程和服务器进程之间复制 2.一旦共享内存映射到进程的地址空间,进程之间的数据操作就不涉及内核了。 3.信号量通常用于同步多个进程对共享内存的访问。 因为服务进程在将数据完全写到共享内存之前,客户进程不应该去取这些数据。 4.XSI 共享内存是内存的匿名端。 5.XSI 共享内存和内存映射的区别是:前者没有相关文件,后者有相关文件。 .原创 2020-08-02 15:20:36 · 369 阅读 · 0 评论 -
15.8 信号量测试
15.8 信号量(1)概述 1.信号量是一个计数器 2.信号量用于多个进程对共享数据的访问。 3.信号量由内核实现,测试及-1是原子操作。 4.常用的简单信号量称为二元信号量。 5.一般信号量的初值可以是任意一个正值,表明有多少个共享资源单位可供共享使用。 6. 系统对信号量的限制 SEMMNI: 系统允许的信号量集的上线 SEMMSL: 单个信号量集中信号量的上限 SEMMNS: 系统允许的信号量集的上限 7.信号量集结构 struct { unsigned sho.原创 2020-07-31 17:48:02 · 432 阅读 · 1 评论 -
15.7 消息队列
消息队列概述15.7 消息队列(1)概述 1.msgget: 创建一个新队列或者打开一个现有队列。 2.msgsnd:将新消息添加到队列尾部。 3.msgrcv:从队列中取数据。 注意:并不一定从队列头取数据,也可以按消息的类型或者字段取数据。 4.每个消息包含:字段、长度、实际数据字节数。 5.为什么需要消息队列? 1.管道和FIFO都是字节流的模型,从管道中读出一段数据时,不知道这些数据来自几个消息。 2.通过消息队列,无需花费尽力从字节流中解析出完整的消息。 3.消.原创 2020-07-31 10:32:35 · 373 阅读 · 0 评论 -
15.6 XSI IPC (System Interface and Headers)
15.6 XSI IPC (System Interface and Headers) 1.有三种称作XSI IPC的IPC: 消息队列、信号量、共享内存。他们有许多相似之处 2.identifer(标识符)(1)标识符和键 1.每个内核中的IPC结构都用一个非负整数的标识符加以引用。 2.为使多个合作进程能够在同一IPC对象上汇聚,需要提供一个外部命名方案。 3.每一个IPC对象都与一个键(KEY)关联,这个键作为该对象的外部名。 4.无论何时创建IPC结构(msgget、semget、.原创 2020-07-31 10:23:41 · 221 阅读 · 0 评论 -
FIFO的用途
(5)FIFO的两种用途 [1] shell命令使用FIFO将数据从一条管道传送到另一条是,无需创建中间临时文件。 [2] 客户进程-服务端进程应用程序中,FIFO用作汇聚点,在客户进程和服务进程二者之间传递数据。 1.有一个服务器进程,它与很多客户进程有关。 2.每个客户进程都可将其请求写入到一个该服务器进程所创建的众所周知的FIFO中。 3.服务器进程从FIFO中读取多个客户进程所发送来的数据。 缺陷:服务器进程不能通过一个FIFO选择回答某个客户进程。(6)注意 1. 通.原创 2020-07-30 16:15:53 · 1725 阅读 · 0 评论 -
协同进程 (管道实现)
15.4 协同进程(1)概念 过滤程序:指从标准输入中读取数据,向标准输出写数据的程序(比如管道产生两个程序)。 协同进程:某个过滤程序1既能产生过滤程序2的输入,又能读取读取过滤程序2的输出时,过滤程序1就为协同进程(coprocess) 注:1.管道就是协同进程的例子。 2.当子进程为过滤程序时,父进程产生子进程的输入,同时父进程又读取子进程的输入,这时子进程程序为协同进程。 3.popen只提供连接到另一个进程的标准输入或标准输出的一个单向管道,而协同进程则有连接到另一个进程的两个单.原创 2020-07-30 14:53:29 · 390 阅读 · 0 评论 -
FIFO文件的open特性测试
15.5 FIFO(1)概念 1.FIFO也称为命名管道,通过FIFO不相关的进程也能实现通信 (2) 创建FIFO [1]接口 int mkfifo(const char *path, mode_t mode); 说明: 1.创建FIFO后会生成一个文件,FIFO的路径名会存在于文件系统中。 2.mode参数与open中的mode参数相同(见3.3节) 3.新FIFO用户和组的所有权规则与4.6节所述相同。 int mkfifoat(int fd, con.原创 2020-07-27 15:02:22 · 862 阅读 · 0 评论 -
条件变量属性----时钟属性
条件变量有两个属性:进程共享属性、时钟属性。(1)进程共享属性 条件变量与互斥量的共享属性的用法一样 int pthread_condattr_init(pthread_condattr_t *attr); int pthread_condattr_destroy(pthread_condattr_t *attr); int pthread_condattr_getpshared(const pthread_condattr_t *attr, int *pshared); int pthrea.原创 2020-07-26 19:12:49 · 2035 阅读 · 0 评论 -
互斥量属性
[1]使用非默认属性初始化互斥锁时,使用下面两个函数。 int pthread_mutexattr_init(pthread_mutexattr_t *attr); int pthread_mutexattr_destroy(pthread_mutexattr_t *attr); [2]互斥量的属性 <Linux应用编程>中说明:有多个线程的进程创建子进程会导致非常多问题,所以这里考虑的是两个单进程线程。 1)进程共享属性 1.编译时判断宏_POSIX_THREAD_..原创 2020-07-26 18:19:35 · 682 阅读 · 0 评论 -
12.3 线程属性
(1)线程属性初始化与销毁 int pthread_attr_init(pthread_attr_t *attr); int pthread_attr_destroy(pthread_attr_t *attr); 1.pthread_attr_init对象对属性对象的内存空间时动态分配的 2.pthread_attr_destroy函数会释放动态分配的内存 3.pthread_attr_destroy函数会用无效的值初始化attr对象 (2)线程属性 名称 ..原创 2020-07-20 17:02:58 · 329 阅读 · 0 评论