自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 资源 (1)
  • 收藏
  • 关注

原创 第49章 内存映射

mmap()系统调用在调用进程的虚拟地址空间创建一个新内存映射。映射分为两种。文件映射 :文件映射将一个文件的一部分直接映射到==调用进程的虚拟内存中。==一旦一个文件被映射之后就可以通过在相应的区域中操作自己来访问文件内容了。映射的分页会在需要的时候性文件中自动加载。这种映射映射也被称为基于文件的映射或内存映射文件。匿名映射:一个匿名映射没有对应的文件,相反,这种映射的分页会被初始化为0,另一种看待匿名映射 的角度(并且也接近于事实)是把他看成是一个内容总是被初始化为0的虚拟文件的映射。

2023-08-13 08:55:27 169

原创 第63章 其他备选的 I/O模型

本章我们探究了针对标准I/O 模型之外的其他几种可选的I/O 模型。它们是:I/O 多路复用(select()和poll())、信号驱动I/O 以及Linux 专有的epoll API。所有这些机制都允许我们监视多个文件描述符,以查看哪个文件描述符上可执行I/O 操作。需要注意的是,所有这些机制并不实际执行I/O 操作。相反,一旦发现某个文件描述符处于就绪态,我们仍然采用传统的I/O 系统调用来完成实际的I/O 操作。

2023-08-12 11:27:40 136

原创 第44 章 管道和FIFO

每个shell用户都对在命令中使用管道比较熟悉,如下面这个统计一个目录中文件数目的命令所示。为执行上面的命令,shell创建了两个进程分别执行ls和wc.(这时通过使用fork()和exec()来完成的,第24章和27章分别对这两个函数进行了介绍。)图44-1展示了这两个进程是如何使用管道的。除了说明管道的用法之外,图44-1的另外一个目的是阐明管道这个名称的由来。可以将管道卡成是一组铅管,它允许数据从一个进程流向另一个进程。

2023-08-05 21:10:26 165

原创 第51章 POSIX IPC 介绍

三种POSIX IPC 机制拥有很多共有特性。表51-1对他们地API进行了总结。除了在表51-1中提及外,本章剩余地部分将不会特意之处POSIX信号量存在两种形式这个事实:命名信号量和未命名信号量。命名信号量与本章介绍地其他POSIX IPC 机制类似:他们通过一个名字来标识,并且所有具备在该对象上合适权限地进程都能够访问该对象。未命名信号量没有关联地标识符,而是会被放置在由一组进程或单个进程中地多个线程共享地内存区域中。IPC 对象名字要访问一个POSIX IPC对象就必须要通过某种方式来识别出它。

2023-07-31 12:39:40 163 1

原创 第55章 文件加锁

应用程序的一个常见需求是从一个文件中读取一些数据,修改这些数据,然后将这些数据协会文件。只要在一个时刻只有一个几次呢很难过以这种方式使用文件就不会存在问题,但当多个进程同时更新一个文件时的问题就出现了。假设各个进程按照下面的顺序来更新一个包含了一个序号的文件。从文件中读取序号使用这个序号完成应用程序定义的任务。递增这个序号并将其写回文件。这里存在地问题是两个进程在没有采用任何同步技术地情况下可能会同时执行上面地步骤从而导致(举例)出现图55-1中给出地结果(这里假设序号地初始值为1000)。

2023-07-30 17:08:15 100

原创 第43章 进程间通信简介

本章概述了进程(以及线程)可用来相互通信和同步动作地各种工具。Linux 提供地通信工具包括管道、FIFO、socket、消息队列以及共享内存。Linux 提供地同步工具包括信号量和文件锁。在很多情况下在执行一个给定地任务时存在多种技术可以用于通信合同不。本章以多种方式对不同地技术进行了比较,其目标时突出可能对技术选择产生影响地一些差异。

2023-07-23 17:18:26 28

原创 第13章 文件I/O缓冲

输入输出数据的缓冲由内核和stdio库完成。有时可能希望组织缓冲,但这需要了解其对应用程序性能的隐形。可以使用各种系统调用可库函数来控制内核和stdio缓冲,并执行一次性的缓冲区刷新。进程可使用posix_fadvise()函数,可就进程对特定文件可能采取的数据访问模式向内核提出建议。内核可籍此来优化对缓冲区高速缓存的应用,进而提高I/性能。在Linux环境下,open()所特有的O_DIRECT标识允许特定应用跳过缓冲区告诉缓存。

2023-07-23 12:16:33 186

原创 第5章 深入探究文件I/O

本章介绍了原子操作的概念,这对于一些系统调用的正确操作至关重要。特别是,指定O_EXCL标志调用open(),这确保了调用者就是文件的创建者。而指定O_APPEND标志来调用open(),还确保了多个进程在对同一文件追加数据时不会覆盖彼此的输出。系统调用fcntl()可以执行许多文件控制操作,其中包括:修改打开文件的状态标志、复制文件描述符。使用dup()和dup2()也能实现文件描述符的复制功能。

2023-07-22 12:02:11 56

原创 第4章文件 I/O:通用的I/O模型

所有执行I/O操作的系统调用都以文件描述符,一个非负整数(通常是小整数),来指代打开的文件。文件描述符用以表示所有类型的已打开文件,包括管道(pipe)、FIFO、socket、终端、设备和普通文件。针对每个进程,文件描述符都自成一套。按照惯例,大多数程序员都期望能够使用3种标准的文件描述符,见表4-1.在程序开始运行之前,shell代表程序打开这三各文件描述符。更确切地说,程序继承了shell文件描述符地副本----在shell地日常操作种,这三个文件描述符始终是打开地。

2023-07-18 20:55:25 51

原创 第54章 POSIX共享内存

POSIX 共享内存对象用来在无关进程间共享yik-内存区域而无需创建一个底层的磁盘文件。为创建POSIX共享内存对象需要使用shm_open()调用来替换通常在mmap()调用之前调用的open()。shm_open()调用会在基于内存的文件系统中创建一个文件,并且可以使用传统的文件描述符系统调用在这个虚拟文件上执行各种操作。特别的,必须要使用ftruncate()来设置共享内存的大小,因为其初始长度为零。

2023-07-11 10:28:39 136

原创 第 53 章 POSIX 信号量

SUSv3规定了两种类型的POSIX信号量。命名信号量:这种信号量拥有一个名字。通过使用相同的名字调用sem_open(),不想管的进程能够访问同一个信号量。未命名信号量:这种信号量没有名字,相反,它位于内存中一个预先商定的位置处。未命名信号量可以在进程之间或一组线程之间共享。当在进程之间共享时,信号量必须位于一个共享内存区域内(System V、POSIX或mmap()).当在线程之间共享时,信号量可以位于被这些线程共享的一块内存区域中(如在堆上或是一个全局变量中)。

2023-07-10 11:13:21 50

原创 第52章 POSIX 消息队列

POSIX消息队列API中的主要函数如下。mq_open()函数创建一个新消息队列或打开一个既有队列,返回后徐调用中会用大的消息队列描述符。mq_send()函数向队列中写入一条消息。mq_receive()函数从队列中读取一条消息。mq_close()函数关闭进程之前打开的一个消息队列mq_unlink()函数删除一个消息队列并当所有进程关闭该队列时对队列进行标记以便删除。上面的函数所完成的功能是相当明显的。此外POSIX消息队列API还具备一些特别的特性。

2023-07-04 13:12:01 659

原创 第33章 线程:更多细节

不要将线程与信号混合使用,只要可能多线程应用程序的设计应该避免使用信号。如果多线程应用必须处理异步信号的话,通常zuijianjie-的方法是所有的线程都阻塞信号,创建一个专门的线程调用sigwait()函数(或者类似的函数)来接收收到的信号。这个线程就可以安全地执行像修改共享内存(处于互斥量的保护之下)和调用非异步信号安全的函数。

2023-07-01 09:46:39 52

原创 第32章 线程:线程取消

函数pthread_cancel()允许某线程向另一线程发送取消请求,要求目标线程终止。目标线程如何响应,取决于其取消性状态和类型。如果禁用线程的取消性状态,那么请求会保持挂起状态,直至将线程的取消性状态置为启用。如果启用取消性状态,那么线程何时响应请求则依赖于取消性类型。若类型为延迟取消,则在线程下一次调用某个取消点(SUSv3标准所规定的一系列函数之一)时,取消发生。如果为异步取消类型,取消动作随时可能发生(鲜有使用)。

2023-06-27 20:28:20 179

原创 第31章 线程:线程安全和每线程存储

要使用线程特有数据,可函数执行的一般步骤如下。函数创建一个键(key),用以将不同函数使用的线程特有数据项区分开来。调用函数pthread_key_create()可创建此键,且秩序在首个调用该函数的线程中创建一次,函数pthread_once()的使用正是出于这一目的,即允许在创建时并未分配任何线程特有数据块。调用pthread_key_create()还有另一个目的,即允许调用者指定一个自定义解构函数,用于释放为该键所分配的各个存储块。

2023-06-27 15:52:30 58

原创 第30章 线程:线程同步

线程提供的强大共享是有代价的。多线程应用程序必须使用互斥量和条件变量等同步原语来协调对共享变量的访问。互斥量提供了对共享变量的独占式访问。条件变量允许一个或多个线程等候通知:其他线程改变了共享变量的状态。

2023-06-26 19:50:55 44

原创 第29章 线程:介绍

与进程类似,线程是允许应用程序并发执行多个任务的一种机制。如图29-1所示,一个进程可以包含多个线程。统一程序中的所有线程均会独立执行相同程序,且共享同一份全局内存区域,其中包括初始化数据段(initialized data)、未初始化数据段(uninitialized data),以及对内存段(heap segment)。传统意义上的UNIX进程只是多线程程序的一个特例,该进程只包含一个线程图29-1其实做了一些简化。

2023-06-25 17:43:13 32

原创 第10章 时间

真实时间对应于时间定义的每一天。当真实时间通过一些标准点计算的时候,我们称它为日历时间。和经过的时间相对,他是度量一个进程生命周期的一些点(通常是开始)。进程时间是由一个进程使用的CPU时间量,并划分为用户时间和系统时间。多种系统调用允许我们获取和设置系统时钟值(即日历时间,以秒为单位从Epoch计算),以及一些列的库函数能够完成从日历时间到其他格式之间的转换,包括分解时间和具有可读性字符串。描述这种转换把我们引入了地区和国际化的讨论。

2023-06-23 21:48:49 66

原创 第22章 信号:高级特性

某些信号引发进程创建一个核心转储文件,并终止进程。核心转储所包含的信息可供tiaoshi-起检查进程终止时的状态。默认情况下,对核心转储文件的命名位core,但Linux提供了/proc/sys/kernel/core_pattern文件来控制对核心转储文件的命名。信号的产生方式可以是异步的,也可以是同步的。当由内核或者另一进程发送给进程时,信号可能时异步产生的。进程无法精确预测异步信号的传递时间。(文中曾指出,异步信号通常会在接收进程第二次从内核态切换到用户态时进行传递。

2023-06-23 11:38:17 214

原创 第48章System V共享内存

为使用一个共享内存端通常需要执行以下步骤调用shmget()创建一个新共享内存段或取得一个既有共享内存段的标识符(即有其他进程创建的共享内存段),这个调用将返回后续拥戴的共享内存标识符。使用shmat()来附上共享内存段,即 使该段成为调用进程的续集你内存的一部分此刻程序中可以像对待其他可用内存那样对待这个共享内存段,未引用这块共享内存,需要使用shmat()调用返回的adr值,他是一个指向进程的虚拟地址空间中该共享内存段的起点的指针,

2023-06-18 17:30:34 122

原创 第21章 信号:信号处理器函数

本章讨论了影响信号处理器函数操作与设计的一系列因素。由于没有对信号排队,故而在为处理器编码时,有时必须要考虑特定类型信号多次发生的可能性,即使之前信号只产生过一次。可重入问题会影响到对全局变量的修改方式,还限制了可从信号处理器函数中安全调用的函数范围。除了返回之外,信号处理器函数的终止还存在多种其他方法,其中包括:调用_exit(),发送信号来终止进程(kill(),raise()或abort()),或者执行非本地跳转。

2023-06-17 20:28:38 132

原创 第20章 信号:基本概念

信号处理器程序(也成为信号捕捉器)是当指定信号传递给进程时将会调用的一个函数。本节鸟叔了信号处理器的基本原理,21章将做详细介绍。调用信号处理器程序,可能回随时大端主程序流程:内核代表进程来调用处理器程序,当处理器返回时,主程序会在处理器打断的位置恢复执行。这一工作序列可用图20-1来加以说明。图20-1信号到达并执行处理器程序虽然信号处理器程序几乎可以为所欲为,但一般而言,设计应力求简单。21.1节将对这一点展开论述。程序清单20-1:为SIGINT信号安装一个处理器程序\n");int j;

2023-06-15 20:30:53 126

原创 第61章 SOCKET:高级主题

在许多情况下,当在流式套接字上执行I/O操作时会出现部分读和部分写地现象。我们给出了两个函数readn()以及writen()地实现,他们可用来确保将缓冲区中地数据完整地读取或者写入。shutdown()系统调用对连接种植提供了更加精细地控制。通过调用shudown(),无论是否有其他打开地文件描述符指向套接字,我们都可以强心关闭双向通信流地其中一段或两端。

2023-06-10 21:11:16 139

原创 第59章 SOCKET: Internet Domain

计算机以二进制形式来表示IP地址和端口号,但人们发现名字比数字更容易记忆,使用符号还能有效的利用间接关系,用户和程序可以继续使用同一个名字,即使底层的数字值发生了变化也不会收到影响。主机名和连接在网络上的一个系统(可能拥有多个IP地址)的符号标识符。服务名时端口号的符号表示。主机地址和端口的表示有下列两种方法。主机地址可以表示为一个二进制值或者一个符号主机名或展现格式(IPv4是点分十进制,IPv6是一个十六进制字符串)。端口号可以表示为一个二进制值或一个符号服务名。

2023-06-03 16:28:32 457

原创 第42章 共享库高级特性

动态链接器提供了dlopen API ,它允许程序在运行时显示地加载其他共享库,这样程序就能够实现插件功能了。共享库设计的一个重要方面时控制符号的可见性,这样库就能够只导出那些与该库进行连接的程序需要用到的符号了。本章介绍了几项用来控制符号可见性的技术。在这些技术中,版本脚本对符号可见性控制的粒度最细。本章还介绍了如何使用版本来实现一个共享库导出同一符号的多个定义以供该库进行链接的不同应用程序使用的模型。

2023-05-27 17:48:19 454 1

原创 第58章 SOCKET:TCP/IP网络基础

TCP/IP 是一个分层的联网协议套件。在TCP/IP协议栈的最底层是IP网络层协议。IP以数据报的形式传输数据。IP是无连接的,表示在源主机和目的主机之间传输的数据报可能经过网络中的不同路径。IP是不可靠的,因为他不保证数据报会按顺序以及不重复到达,甚至还不保证数据报一定会到达。如果压球可靠性的话,就必须要通过使用一个可靠的高层协议(如TCP)或在应用程序中完成。

2023-05-27 10:41:21 177 1

原创 第57章 SOCKET: UNIX DOMAIN

UNIX domain socket 允许位于同一主机上的应用程序之间进行通信。UNIX domain支持流socket和数据报socket。UNIX domain socket 是通过文件系统中的一个路径名来标识的。文件权限可以用来控制对UNIX domain socket 的访问。socketpair()系统调用创建一对相互连接的UNIX domain socket。

2023-05-03 10:42:50 861

原创 第56章 SOCKET:介绍

在一个典型的客户端/服务器场景中,应用程序使用socket进行通信的方式如下。各个程序创建一个socket。socket是一个允许通信的“设备”,零个程序都需要用到它。服务器将自己的socket绑定到一个众所周知的地址(名称)上似的客户端能够定位到他的位置使用socket()系统调用能够创建一个socket,他返回一个用来在后续系统调用中引用该socket的文件描述符。//在被章节介绍的所有应用程序中,protol参数总是被指定为0通信domain。

2023-04-20 20:40:22 197

原创 41章 共享库基础

主要讲述linux 共享库基础以及相关概念

2023-04-15 10:12:21 479

原创 47章 System V信号量

使用System V信号量的常规步骤如下。使用semget()创建或打开信号量集。使用semctl()SETVAL或SETALL操作初始化集合中的信号量。(只有一个进程需要完成这个任务)使用semop()操作信号量值。使用信号量的进程通常会使用这些操作来表示i中共享资源的获取和释放当所有进程都不再需要使用信号量集之后使用semctl()IPC_RMID操作删除这个集合(只有一个进程需要完成这个任务)大多数操作系统都为应用程序提供了一些信号量原语。

2023-03-17 20:58:49 116

原创 第46章 System V消息队列

System V IPC 介绍

2023-03-08 21:44:38 140

原创 IPC标识符和客户端/服务器应用程序

System V IPC 标识符和客户端、服务器应用程序总结概述

2023-03-05 14:51:21 148

原创 System V IPC key

System V IPC 中key的产生方法以及算法概述

2023-03-03 22:04:30 35

原创 Sysytem V IPC介绍

linux 系统编程手册读书笔记--System V IPC概述

2023-03-01 21:26:22 106

腾达U9驱动程序源代码

腾达U9驱动程序源代码,

2023-07-06

linux/unix系统编程手册附录代码

linux/unix系统编程手册附录代码,适用于想提高自己linu水平以及对linux感兴趣的的同学去参考阅读

2023-06-04

CSFB持续更新.docx

在学习LTE过程中,刚学到LTE语音业务这块内容,整理一下LTE语音解决方案的的过渡方案--CSFB相关的内容。希望与大家共享

2019-11-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除