![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux高级程序设计
自然是VicLi
这个作者很懒,什么都没留下…
展开
-
system V进程间通信-消息队列
Linux继承了system V提供的3种通信方式,分别是消息队列、信号量和共享内存。 11.1system V IPC基础 Linux继承了system V提供的3种通信方式,分别是消息队列、信号量和共享内存。和文件一样,IPC在使用前必须创建,每种IPC都有特定的生产者、所有者和访问权限。使用ipcs可以查看当前系统正在使用的IPC工具。 ------ Message Queues -------- key msqid owner perms used-byt原创 2020-08-26 22:11:38 · 397 阅读 · 0 评论 -
linux异步信号处理机制2
10.2安装信号与捕获信号 10.2.1信号处理办法 当进程收到操作系统一个信号,可以采用下面处理方法: 1.忽略此信号。大多数信号都可以用这种方式处理,但SIGKILL和SIGSTOP不能被忽略。 2.自定义捕捉信号方式。当某信号到来时,执行用户自定义操作,这要求该进程先安装该信号,即通知内核在某种信号发生时调用一个特殊函数。 3.执行系统默认操作。Linux对任何一个信号都规定了一个默认操作。 10.2.2signal安装信号 程序要求接收到某信号时执行用户的特殊操作,需要安装信号处理函数。 typed原创 2020-08-23 17:40:27 · 270 阅读 · 0 评论 -
Linux异步信号处理机制1
10.1Linux常见信号处理 10.1.1信号与中断 Linux信号是一种进程间异步通信机制,在实现上是一种软中断。信号可以导致一个正在运行的进程被异步打断,转而处理一个突发事件。 Linux在/usr/include/asm/signal.h中详细的定义了信号的信号值。 ➜ _10_SIGNALS cat /usr/include/asm/signal.h 。。。 #define SIGHUP 1 #define SIGINT 2 #define SIGQUIT 3 #define SI原创 2020-08-21 16:43:37 · 314 阅读 · 0 评论 -
进程间通信-有名管道(FIFO)
9.2.1有名管道概念 无名管道是临时的,在完成通信后自动消息,因为文件描述符只能在某个进程中可见,因此被广泛用于具有亲缘关系的进程间通信,采用的方法是先创建管道,再创建进程,使子进程继承父进程创建的管道文件描述符。 有名管道FIFO有效克服了这一问题,它依赖于文件系统,是一个存在的特殊文件,实现不同进程对文件系统下的某个文件访问是非常方便实现的。因此,FIFO可以在同主机任意进程间实现通信。 有名管道和普通文件一样具有磁盘存放路径、文件权限和其他属性;但是,有名管道和普通文件又有区别,有名管道并没有在磁盘原创 2020-08-20 10:44:27 · 2152 阅读 · 0 评论 -
进程间通信-管道(无名管道)
进程间通信的主要方式 9.1进程间通信-管道 9.1.1无名管道 默认情况下,一个进程都默认打开3个设备文件,一个标准输入设备(键盘),标准输出设备(显示器),和错误输出设备(显示器)。且默认从标准输入设备读入信息,将正确的信息写入到标准输入,将错误信息写入到标准输出。使用管道“|”可以将两个命令连接起来,从而改变标准的输入输出方式。 在此shell命令应用中,rpm -qa命令(进程)的输出作为grep telnet的命令的输入,连接输入/输出的中间设备即为一个管道文件。因此,管道可以将一个命令的输出作原创 2020-08-19 17:16:19 · 616 阅读 · 0 评论 -
Linux进程管理与程序开发3
8.2.3回收进程用户空间资源 在linux系统下,可以通过以下方式结束进程。 显示的调用exit或_exit系统调用。 在main函数中执行return语句。 隐含的离开main函数,例如遇到main函数的“”}。 进程在正常退出前都需要执行注册的退出处理函数,刷新流缓冲区等操作,然后释放进程用户空间的所有资源。而进程的控制块PCB并不在这时释放,仅调用退出函数的进程属于一个僵死进程。 1.exit和return的区别 函数exit用于退出进程。在正式释放资源前,将以反序的方式执行由on_exit()函数原创 2020-08-18 16:41:31 · 204 阅读 · 0 评论 -
Linux进程管理与程序开发2
8.2进程管理及控制 8.2.1创建进程 1.fork函数 在Linux环境下,创建进程的主要方法是调用fork()函数。Linux下所有进程都有init(PID为1),直接或间接创建。 extern __pid_t fork(void); 若执行成功,在父进程中将返回在进程的PID,类型为pid_t,子进程将返回0,以区别父子进程。 若执行失败,则在父进程中返回-1,错误原因储存在errno中。 fork()函数调用成功后,将为子进程申请PCB和用户内存空间。子进程会复制父进程几乎所有信息,在用户空间将复原创 2020-08-17 16:31:16 · 122 阅读 · 0 评论 -
Linux 进程管理与程序开发1
8.1进程的环境及进程属性 8.1.1程序、进程与进程资源 进程是Linux系统下资源管理的基本单元,线程是Linux系统调度的基本单元。注意区分。 进程资源由两部分组成:内核空间的进程资源和用户空间的进程资源。 内核空间进程资源即PCB(进程控制块,通过struct task_struct来管理)相关的信息。包括进程控制块本身、打开的文件表项、当前目录、当前终端、线程基本信息。可访问内存地址空间、PID、PPID、UID、EUID等。内核通过PCB可以访问该进程的所有资源。这些资源只能通过系统调用才能访问原创 2020-08-16 20:17:27 · 147 阅读 · 0 评论 -
终端及串口编程
7.1.1 实际的物理串口 如果使用虚拟机开发串口程序,可以使用win下文件来代替串口 7.1.2 控制台终端 tty1-tty6为控制台终端 7.1.3 虚拟终端 /dev/ptmx虚拟设备 是一个字符文件,用于创建虚拟网络设备master/slave配对设备,要打开一个未使用的虚拟终端,通过调用posix_openpt(),来打开/dev/ptmx。 /dev/pts虚拟设备 7.2 终端属性控制 终端属性包括: 输入属性、输出属性、控制属性、本地属性、行路规划属性和控制字符 7.2.1 读取/设置原创 2020-07-23 21:36:16 · 356 阅读 · 0 评论 -
普通文件、连接文件、目录文件属性管理
3.1.1 linux下的VFS虚拟文件系统 Linux采用VFS来管理系统,VFS全称是Virtual File System(虚拟文件系统)。VFS是不同类型文件之上的软件粘合层,因为VFS可以无缝使用多个不同类型的文件系统。 VFS的作用就是采用标准的UNIX系统调用来读写位于不同物理介质上的不同文件类型。 Linux内核采用inode结构体来保存与文件相关的信息,比如访问权限,文件大小和创建时间,这些信息被称为文件的元数据。inode数据结构和内容本身是分开存放的。VFS采用的是面向对象的编程方法,原创 2020-07-03 10:43:30 · 693 阅读 · 0 评论 -
POSIX文件及目录管理
前言:LINUX下实现了两类对文件IO管理。 POSIX标准,open,close,read,write ANSI提供的标准IO库函数 上篇博客已写了关于ANCI的操作 2.1 文件描述符与内核文件表项 2.1.1 文件流与文件描述符的区别 使用ANSI C库函数fopen打开的文件对应一个流对象;ANCI属于用户态,对应的也要操作内核,即open,close,read,write,符合POSIX标准,使用POSIX打开一个文件都会分配一个唯一的非负整数,用于标识该打开的文件,即文件描述符。 注意ANS原创 2020-06-30 10:16:46 · 788 阅读 · 0 评论 -
ANSI C文件IO管理
ANSI C文件IO管理 1.1.1 文件与流的基本概念 文件:文本文件:ASCII文件 二进制文件:数据按其在内存中中的形式存储数据 缓冲文件操作:在用户空间自动为正在使用的文件开辟内存缓冲区 非缓冲文件操作:用户手动开辟; 使用缓冲机制原因: 减少CPU状态的切换,即从用户态切换到内核态;待缓冲区满后,或确实需要更新的时候在调用系统将该文件一次性写入磁盘。 缓冲区分为:全缓冲区、行缓冲区、无缓冲区 ANSI标准C库函数用流的概念实现这一特性,也就是用流对文件进行操作 1.1.2 标准流及流的主要功能原创 2020-06-27 21:41:54 · 160 阅读 · 0 评论