Liunx系统编程(纯理论分享一)

一、IO

1. IO的种类

标准IO:库函数
文件IO:系统调用

2. 库函数和系统调用

系统调用:系统调用是从用户空间进入内核空间的唯一方法,它的可移植性差、没有缓冲区,所以效率低。
库函数:库函数=系统调用+缓冲区,它的可移植性比较强、有缓冲区,所以效率高。

3. 标准IO和文件IO的区别

(1)缓冲机制
标准IO具有缓冲机制,自动处理数据的缓冲和刷新,提高IO效率;
文件IO无缓冲机制,需开发者自行处理数据的读写。
(2)函数来源
标准IO的函数接口了来自于C语言的标准库,与操作系统无关,因此具有良好的移植性;
文件IO的函数接口来自Liunx内核,与操作系统紧密相关,移植性差。
(3)操作入口
标准IO操作文件的入口是文件流,通过文件流来进行数据的读写;
文件IO操作文件的入口是文件描述符(fd),通过文件描述符来访问文件。
(4)应用场景
标准IO适用于对文本文件的读写操作,提供了丰富的文件接口和缓冲机制,方便开发者进行文件操作(按字符读取、按行读取等等十几个函数)。
文件IO适用于读二进制文件进行读取,以及对底层设备的访问,如网络套接字、硬件设备等等。
还用于实时性高的场景,如传感器数据的读写。

4. 标准IO缓冲区问题

(1)缓冲区的种类

行缓存:与终端相关的缓冲区(stdin、stdout)
全缓存:与文件相关的缓冲区(fp)
无缓存:标准出错没有缓冲区(stderr)

(2)缓冲区大小

行缓存:1k
全缓存:4k
无缓存:0

(3)缓冲区的刷新方式

行缓存
(1)遇到换行符时
(2)调用fclose()
(3)程序结束时
(4)输入输出切换时
(5)当行缓冲区满时
(6)用fflush()刷新缓冲区
全缓存
(1)调用fclose()
(2)程序结束时
(3)输入输出切换时
(4)当行缓冲区满时
(5)用fflush()刷新缓冲区

5. 目录

遍历目录
用opendir打开目录,然后循环调用readdir直到readdir返回NULL
判断每个文件的类型,如果是目录文件,就递归调用当前函数本身来遍历这个目录
如果是普通文件,则输出

二、文件映射虚拟内存

1. 简介

文件映射虚拟内存,是把文件映射到内存中,用操作内存的方式来操作文件,能高效实现文件 I/O 和进程间共享数据。
如果是比较大的文件,可以提高效率。
硬盘操作相对于文件操作,效率低下很多。

2. 编程模型

三、进程

1. 简介

progress 进程是操作系统资源分配的基本单位,是一个独立运行的程序实例。每个进程拥有独立的内存空间、文件描述符、寄存器状态等系统资源,相当于一个 “独立的程序运行环境”。
线程,是进程内的一个执行单元,是操作系统调度的基本单位(CPU 调度的最小单位)。线程共享所属进程的全部资源(如内存空间、文件句柄),但拥有自己的程序计数器、栈和寄存器状态。

2. 进程的状态

R 运行时状态 S 睡眠状态 T 挂起状态 D 死亡状态 Z僵尸状态

3. 如何创建一个进程

(1)执行程序创建
可执行程序 a.out
(2)exec簇
(3)fork

4. 进程间的通信

进程间的通信,就是不同进程之间传递数据、交换信息或协同工作的机制。由于进程拥有独立的地址空间,无法直接访问彼此的内存,因此需要专门的IPC机制来实现数据交换。
常见的进程间通信方式如下:
(1)管道
(2)命名管道
(3)信号
(4)共享内存
(5)消息队列
(6)信号量
(7)套接字

四、管道

1. 简介

是一种用于进程间通信的机制,它允许一个进程的输出作为另一个进程的输入,实现数据的单向传递。
管道是半双工的,数据只能从一端流入、另一端流出(通常分为「读端」和「写端」)。
管道传输的都是字符串,如果是其他数据,会转成字符串再进行传输;要注意数据的边界以及格式

2. 分类

匿名管道
直接就是打开的文件描述符,能且只能在父子进程之间通信。
通过pipe()系统调用创建,没有文件名,仅在进程生命周期内存在,进程退出后自动销毁。
有名管道
通过mkfifo()系统调用创建,有一个可见的文件名存于文件系统中;
可用于无亲缘关系的进程通信,只要知道管道的路径即可访问;
本质是特殊的文件,遵循先进先出原则。

五、信号

1. 简介

是一种用于进程间异步通信的机制,用于通知进程发生了某种事件(如错误、外部中断、用户请求等),促使进程执行预先定义的处理动作。
信号可以理解为操作系统向进程发送的「通知」,它具有异步性(进程无需主动等待,信号可随时到来)和简洁性(主要传递事件类型,不携带复杂数据)。

2. 产生信号

  • 按键产生,如:ctrl+c(2 终止/中断)、ctrl+z(20 暂停)、ctrl+\(3 退出)
  • 系统(函数)调用产生,如:kill、raise、abort
  • 软件条件产生,如:定时器alarm
  • 硬件异常产生,如:非法访问内存(段错误)、除0(浮点数例外)、内存对齐出错(总线错误)
  • 命令产生,如:kill命令(给指定进程发送指定信号,不一定是杀死)

3. 信号的处理方式

  • 执行默认处理动作(每一个信号都有自己的默认处理动作)
  • 忽略(丢弃)
  • 捕捉(自定义处理函数)

六、IPC

1. 简介

指多个进程之间传递数据或信号的机制。在多任务操作系统中,进程是资源分配的基本单位,各个进程相对独立,为了协同工作,就需要进程间通信。
IPC有三种:shm--共享内存、msg--消息队列、sem--信号量
基于key,ftok()创建key,区分IPC

2. IPC相关命令

ipcs:查看所有的IC
ipcrm -m:删除共享内存
ipcrm -q:删除消息队列
ipcrm -s:删除信号量

3. 共享内存

创建一块内存段,这块内存段可以让多个进程挂载上去;
挂载上去的进程可以访问这块内存段(读访问、写访问);
共享内存没有先后顺序,然后也无法区分数据来自于哪一个进程;
内存段大小可以指定,访问方式可以限制;
key唯一,通过key来生成的共享内存段唯一。

4. 消息队列

消息队列是创建了一个主机上多个进程都可以访问的队列,实现不同进程间的异步通信
队列里可以存放多个消息;
消息有数据和类型;
消息的数据长度自行指定;
消息的类型是一个unsigned long。

5. 信号量

信号量本质是个整数。
多个进程都可以对这个整数进行操作(加减)
减法操作比较特殊:如果减到0以下,就会阻塞,直到减法的结果不是0以下为止。
随着立体影片、立体照片的内容越来越多,如何在家播放立体影片就是许多影音玩家的梦想。立体萤幕研发商iZ3D不仅自行开发专属播放软体外,包括立体影音业界最强的播放软体Stereoscopic Player播放出更为顺畅的立体影片。专业 3D 视频播放工具 Stereoscopic Player 中文版专业 3D 视频播放工具 Stereoscopic Player 中文版自 2001 年问世的 Stereoscopic Player 直是立体影片播放的首选软件。另外,使用者也可以自行下载各类影片解编码(CODEC)软件,使 Stereoscopic Player 成为套具有播放 HD 高画质立体影片、立体视频和DVD多用途的3D电影播放器。用户界面易于使用。Stereoscopic Player 功能1.全面支持音频文件和播放任何其他格式的支持第三方DirectShow的解码器 MP3, WMA, WMV, Ogg Vorbis, FLAC, 和WAV格式2.十波段均衡器和多种预设环境音效3.支持更换界面主题4.支持HTTP、Windows局域网及Shoutcast、Icecast流媒体播放5.可以读取D3 v1/v1.1/v2信息,在后台扫描播放列表6.支持淡入淡出、歌曲之间无缝连接功能7.”Local Content”选项可以自动检测设备内存中所有的音频文件 (包括自动监测记忆卡插入、拔出状态)兼容Windows Media Center的红外线遥控器8.播放列表管理可以让你轻松定制个性化的文件播放顺序9.支持设定书签,可以方便跳转到所纪录文件或时间段10.最后播放记忆功能,可以”Seek to last position”,支持自动恢复功能11.支持将硬件按钮设置为功能键,支持按键锁定12.支持设定自动休眠时间和屏幕自动关闭功能般特征。Stereoscopic Player 简单技巧模式转换2D转3D2D模拟3D播放的简单方法: 运行Stereoscopic Player,文件-打开左右文件-左侧和右侧文件都选择同个2D影片或者:文件-打开文件-选择2D影片-选择2D单视频,播放时用方向键上下左右可调节红蓝重影的幅度,直到清晰有立体感为止,调节幅度因人而异。双显设置通常要使用双投影或双显示器,您必须使用能提供两个图像显示接口的电脑主机。可以是单显卡双头方式和多显卡方式。例如VGA,DVI,HDMI。在连接显示设备之前,请先确认连接显示设备和显卡的接口是否匹配。在设备连接完毕之后,开启主机和外设。您可以在WINDOWS系统中设置显示设备的屏幕分辨率和屏幕刷新率,请参照显示设备的技术手册。需要注意的是,第二个显示设备通常是要在系统的显示属性中启用才可以正常使用。部分型号的显示卡有独立的属性设置界面,请参照显卡的技术说明。以上的工作是为了让Stereoscopic Player在播放立体视频时,识别到系统已经连接了两个独立的显示设备。安装Stereoscopic Player软件是相当简单的,在安装过程中几乎不需要人工干预。仅仅是提供个安装路径就可以,对般的使用者,使用默认安装路径都可顺利完成安装。在安装好Stereoscopic Player之后,可以在程序组或者系统桌面上找到Stereoscopic Player的图标,点击即可启动控制界面。首先在“检视”菜单中选择“检视方式”, 您可看到有各种立体显示的方式可供选择。请选择“双萤幕输出”。在“档案”菜单中,选择“开启左右档案”。将出现对话框,分别指定你需要播放的立体视频的左视频文件和右视频文件。在音讯选项中可选择从左或右视频中提取。如果你需要使用独立的音讯,请选择“分割音讯档案”,并在对话框中指定所需要的音讯文件。此时,播放器在窗口模式下仅仅播放单路视频,在你用鼠标双击画面后,将会由窗口模式模式切换到全屏模式,这个时候双路视屏分别通过两个不同的显示设备全屏播放。播放时,鼠标指针会自动隐藏。当再次移动鼠标,并双击画面,可从全屏模式返回到窗口模式。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值