IO基础

本文详细介绍了操作系统内核对象的概念及其访问方式,包括如何通过ID访问内核对象,文件的描述符(ID)使用方法,以及如何进行文件的读写操作。此外,还探讨了文件描述符的操作、IO锁的应用、Curses终端I/O的使用方法,以及文件映射技术。文章旨在为读者提供全面的操作系统文件系统与I/O管理的实践指南。

1.认识内核对象

操作系统不允许用户直接访问内核设备和内存

但允许通过内核系统函数访问

对每个内核对象进行编号ID。

如果访问内核对象(内核空间的所有数据的统称),只能通过ID

编程模型:

1)申请得到一个ID

2)在内核系统函数中使用ID得到对应内核对象。

2.怎么访问文件

使用函数,传递一个文件,系统打开文件,加载文件数据

返回一个ID。

使用函数,传递ID,得到数据。

使用函数传递ID,告诉系统释放文件。

ID:文件描述符号。file description (fd)

每个程序执行的时候都有一个目录,存放打开的文件描述符。

3.每个程序默认打开三个文件设备:

0:标准输入

1:标准输出

2:错误输出 (建议)

4.操作文件描述符号

ssize_t  write (int fd,

void *buf,//要写入内核对象的数据

size_t size);//写入数据大小

ssize_t read(int fd,

void *buf;//

size_t size);

三、基于文件的描述符号

1.得到文件描述符号/释放文件描述符号

a.文件类型

目录文件d

普通文件f

字符设备文件c

块设备文件b

符号链接文件l (软连接文件)

管道文件p

socket文件s

b.文件属性

1.属性的表达方式:绝对模式,字符模式

0    0     0

拥有者  组  其它用户

2.文件的权限属性

执行

沾附位权限

设置位权限    用户设置位与组设置位

特殊权限

s 设置位   2 组  4用户  s对执行有效

S 无效的设置

设置位向其它用户开发拥有者权限的权限用户设置位

设置位向其它用户开发组用户权限的权限组用户设置位

对其它用户有效  设置位对执行程序有意义,针对执行权限


t  1表示沾附位设置      t对写文件有意义,无效的沾附位使用T表示。

T 无效的沾附位

沾附位的目的:防止有写权限的用户删除文件  对其它用户有效

设置位改变程序在执行的时候的权限

程序执行中二个用户实际用户

2.通过文件描述符读写数据

3.文件描述符号与重定向


四、IO与文件映射

1.IO的共享与效率

read与write其中数据缓冲的大小

读取数据的缓冲:getpagesize  效率最高,经验值

2.定位与定准读取 随机读取与顺序读取

read与write在操作的时候,自动移动读取位置

lseek改变读取定位

off_t lseek(

int fd,

off_t off,

int whence//定位参照点,文件末,首,及当前位置);

返回当前文件的读写位置

lseek定位超过文件长度时,会改变文件大小

lseek只要合法,都是有效的

off 参数为负,会产生错误,返回-1

pread/pwrite 在指定位置读写 ,会改变读写位置

lseek+write=pwrite

lseek+read=pread

/proc/${pid}/mem文件程序的虚拟内存

文件的其它操作

stat命令可以查看文件信息

fstat()获取文件大小   stat结构  若出现,存储大未知错误,是未加头文件的原因

ftruncate 改变文件大小

4.文件映射

虚拟地址映射到内存

虚拟地址可以映射到文件:用内存方式访问

mmap/munmap

案例:1.使用内存方式写入数据

2.使用内存方式读取数据

1.打开文件

2.映射到一个虚拟的地址mmap

3.把数据写入虚拟地址

4.卸载虚拟地址

5.关闭文件

五、文件描述符号的操作 IO锁

文件描述符号是整数。文件描述符号对应了内核的上下文环境。

1.dup dup2拷贝文件描述符号

dup复制文件符号,返回系统指定的整数

dup2复制文件符号,返回用户指定的整数

2.fcnt1 对文件描述的属性的修改

复制文件描述符号

修改判定文件的描述标记    文件描述符的遗传方式--exec二个进程打开文件描述符的关系

修改判定文件的状态标记

设置强制锁 重新编译内核

设置建议锁 内核默认方式

设置IO信号


六.IO与Curses(介绍)终端IO

Curses CUI

UI CUI字符界面GUI图形界面

使用一套封装库  libcurses.so

/usr/lib目录下

编译只需要指定-lcurses

老版本:libcurses.so

新的版本:libnecurses.so

如果头文件 curses.h不存在,尝试,ncurses.h

如果库curses不存在,尝试使用ncurses


printf/scanf标准IO

大部分标准IO重定向到终端./dev.tty  /dev/pts/1  可重定向

curses就是终端输出  不可重定向 

-lcurses -ncurses 编译命令

为了防止printf重定向到终端破坏UI,禁止在curses中使用标准IO

1.编程模型:

初始化终端initscr

操作终端(输入/输出/定位/刷新……)

释放终端endwin

2.显示

2.1图形输出

border   几何图形输出

box    

hline     水平线

vline     垂直线

属性字条:字节=属性字节+字符字节

注意:box需要窗体,initscr返回被初始化的窗体:标准屏幕window*

实际上curses定义一个全局变量stdscr,就是我们标准屏幕

函数命名规则:

**** 在标准屏幕strscr

w*** 在指定窗体

mv**** 在指定位置

mvw* *** 在指定窗体的指定位置操作

2.2刷新屏幕

void refresh()

void wrefresh(window*)

从里到外刷屏

2.3字符输出

addch

普通字符

属性字符:' '| 属性

特殊的属性字符:比如ACS_PI

2.4字符串输出

addstr

显示的字符属性与颜色

3.颜色属性

3.1判定终端是否支持颜色

bool has_colors();  //都支持颜色。不需要判定

3.2 初始化颜色

int start_colors();

3.3定义颜色对

int init_pair()

3.4使用颜色对

COLOUR_PAIR()

3.5设置属性

attron()开启属性

attroff()关闭属性

这组函数一定要在initscr()初始化后调用

背景函数 bkgd();


案例:

编写一个时间显示屏幕

1.初始化

2.循环显示时间,并且睡眠1秒

3.释放

编写一个登录界面

1.初始化

2.绘制界面头

3.绘制用户名输入区

4.绘制密码输入区

5.等待输入

6.结束


4.输入

4.1字符输入

getchar()  返回输入的字符

noecho禁止回显

使功能键有效,使用keypad(WINDOW *,bool)

curses屏幕清除:erase清屏clear

光标控制:

得到光标位置 getsyx

设置光标的位置 setsyx

光标控制:

得到光标位置   getsyx

设置光标的位置   setsyx

控制光标是否可见:curs_set()   0不可见1正常显示

4.2字符串输入

addstr()

mvgetnstr()

4.3格式数据输入

scanw()

4.4窗口

subwin()//创建子窗体(坐标采用标准屏幕坐标)

derwin()//创建子窗体(坐标采用父坐标)

补充:

1.在VI设置编码:

:set encoding=编码 gb2312iso-8859-1 uft-8

2.在编译器指定源文件的编码 -finput-charset=gb2313

3.在终端指定编码

终端-选择编码格式

4.系统的默认编码   /etc/sysconfig/i18n配置编码

练习:

1.使用内存方式读取数据 文件映射

2.使用curses+io完成:图书信息的录入

3.使用curses+io显示图书信息

每次显示一条

使用up down键翻滚记录数据

4.读取文件,使用curses显示。

实现如下功能:

上下翻页功能

输入q,结束功能

物联网通信协议测试是保障各类设备间实现可靠数据交互的核心环节。在众多适用于物联网的通信协议中,MQTT(消息队列遥测传输)以其设计简洁与低能耗的优势,获得了广泛应用。为确保MQTT客户端与服务端的实现严格遵循既定标准,并具备良好的互操作性,实施系统化的测试验证至关重要。 为此,采用TTCN-3(树表结合表示法第3版)这一国际标准化测试语言构建的自动化测试框架被引入。该语言擅长表达复杂的测试逻辑与数据结构,同时保持了代码的清晰度与可维护性。基于此框架开发的MQTT协议一致性验证套件,旨在自动化地检验MQTT实现是否完全符合协议规范,并验证其与Eclipse基金会及欧洲电信标准化协会(ETSI)所发布的相关标准的兼容性。这两个组织在物联网通信领域具有广泛影响力,其标准常被视为行业重要参考。 MQTT协议本身存在多个迭代版本,例如3.1、3.1.1以及功能更为丰富的5.0版。一套完备的测试工具必须能够覆盖对这些不同版本的验证,以确保基于各版本开发的设备与应用均能满足一致的质量与可靠性要求,这对于物联网生态的长期稳定运行具有基础性意义。 本资源包内包含核心测试框架文件、一份概述性介绍文档以及一份附加资源文档。这些材料共同提供了关于测试套件功能、应用方法及可能包含的扩展工具或示例的详细信息,旨在协助用户快速理解并部署该测试解决方案。 综上所述,一个基于TTCN-3的高效自动化测试框架,为执行全面、标准的MQTT协议一致性验证提供了理想的技术路径。通过此类专业测试套件,开发人员能够有效确保其MQTT实现的规范符合性与系统兼容性,从而为构建稳定、安全的物联网通信环境奠定坚实基础。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值