|
一.IO与文件映射
1.IO的共享与效率
read与write其中数据缓冲的大小
读取数据的缓冲:getpagesize。
2.定位与定位读取(随机读取)
read与write在操作的时候,自动移动读取位置.
lseek改变读取位置.
pread/pwrite在指定位置读写。
2.1.lseek的函数说明:
off_t lseek(
int fd,//定位文件描述符号
off_t off,//定位位置
int whence//定位参照点:文件开始位置(绝对位置)/文件结束位置(绝对位置)/文件当前位置
//SEEK_SET SEEK_END SEEK_CUR
);
返回:
返回当前读取位置在文件中的绝对位置.
2.2.lseek的作用:定位文件的位置
问题:lseek的定位的位置超出文件的大小范围?
lseek移动位置只要合法,都是有效
2.3.lseek+write=pwrite
lseek+read =pread
2.4.案例:
读取一个特殊的文件:
/proc/${pid}/mem文件程序的虚拟内存文件
3.文件的其他操作
fstat获取文件状态
ftruncate改变文件大小
4.文件映射:
虚拟地址映射到内存。
虚拟地址可以映射到文件:可以用内存方式访问文件.
mmap/munmap
案例:
1.使用内存方式写入数据
作业:
-+
2.使用内存方式读取数据
二.文件描述符号的操作(IO锁)
文件描述符号是整数.文件描述符号对应内核的上下文环境.
1.dup dup2拷贝文件描述符号
dup拷贝文件符号,返回系统指定的整数
dup2拷贝文件描述符号,返回用户指定的整数
2.fcntl对文件描述的属性的修改
2.1.拷贝文件描述符号
2.2.修改判定文件的描述标记
2.3.修改判定文件的状态标记
O_RDONLY O_WRONLY _ORDWR O_CREAT O_EXCL
O_APPEND O_ASYN
2.4.设置强制锁(重新编译内核)
2.5.设置建议锁(默认)
2.6.设置的信号
三.IO与Curses(介绍)
Curses:CUI
UI:User Interface.
CUI:字符界面
GUI:图形界面
使用一套封装库 libcurses.so
/usr/lib目录下
编译只需要指定-lcurses
老版本:libcurses.so
新的版本:libncurses.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就是标准屏幕
函数命名规则:
**** 标准屏幕stdscr
w**** 指定窗体
mv**** 指定位置
mvw**** 指定窗体的指定位置
2.2.刷屏
void refresh()
void wrefresh(WINDOW*);
从里到外刷屏
2.3.字符输出
addch
普通字符:''
属性字符: ''|属性
特殊的属性字符:比如ACS_PI
2.4.字符串输出
int addstr(const char *);
2.5.格式字符串输出
int printw(const char*,....);
3.字符属性与颜色
颜色属性
3.1.判定终端是否支持颜色
bool has_colors();//都支持颜色,建议不判定
3.2.初始化颜色:
int start_color();
3.3.定义颜色对
int init_pair(short pair,short fore,short back);
3.4.使用颜色对
COLOR_PAIR(short pair)
3.5.设置属性
attron()开启属性
attroff()关闭属性
这组函数一定要在initscr后调用
背景函数:
bkgd();
案例:
1.时间显示屏幕
1.初始化
2.循环显示时间,并且睡眠1秒
3.释放
2.登录界面
1.初始化
2.绘制界面
头
绘制用户名输入区
绘制密码输入区
3.等待输入
4.结束
4.输入
1.字符输入
int getch();
返回的是字符
禁止回显noecho
使功能键有效,使用keypad(WINDOW*,bool)
案例:
使用键盘控制字母在屏幕上的移动
补充:
curses屏幕清除:man 3 clear
clear
erase
光标控制:
得到光标位置 getsyx
设置光标的位置 setsyx
控制光标是否可见:curs_set();
2.字符串输入
int addstr
3.格式数据输入
scanw
5.窗口
subwin()//创建子窗体(坐标采用标准屏幕坐标)
derwin()//创建子窗体(坐标采用父窗体坐标)
1.在vi设置编码:
:set encoding=编码 gb2312 ios-8859-1 utf-8
2.在编译器指定源文件的编码 -finput-charset=gb2312
3.在终端指定编码:
4.系统默认编码
/etc/sysconfig/i18n配置编码
作业:(使用文件映射)
1.使用内存方式读取数据
2.使用curses+io完成:图书信息的录入
3.使用curses+io显示图书信息:
每次显示一条:
使用up down键翻滚记录数据
4.读取文件文件,使用curses 显示.
实现如下功能:
上下翻页功能
输入q,结束功能
一.目录管理
目录遍历
二.进程
1.进程的创建
2.进程的应用
3.进程的基本控制
|
|