linux(四)
来源:互联网 发布:原创软件发布 编辑:程序博客网 时间:2024/06/10 10:02
一.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=gb23123.在终端指定编码:4.系统默认编码 /etc/sysconfig/i18n配置编码
0 0
- Linux常用命令(四)
- Linux 命令行(四)
- Linux 日记(四)
- Linux常用命令(四)
- Linux常用命令(四)
- linux(四)
- linux基础(四)
- Linux 手册(四)
- linux题目 (四)
- linux预习(四)
- Linux基础(四)
- Linux学习(四)
- Linux学习(四)
- Linux学习(四)
- Linux 学习(四)
- linux流量控制(四)
- Linux终端设备驱动(四)
- linux学习笔记(四)
- ant实现批量打包android应用
- python dir __dict__
- [leetcode] 241.Different Ways to Add Parentheses
- MCS 简单博弈
- 九度oj 1075
- linux(四)
- git 常用命令
- oracle 查看用户所在的表空间
- ZOJ Team Formation 3870【位运算】
- uva725_一道水题(优化到了29ms)
- POJ 2631 -- Roads in the North【树的直径 && 裸题】
- 关于百度地图开发中可能遇到Conversion to Dalvik format failed with error 1
- GooglePlay内购In-app Billing 总结
- 代码格式工具