设为首页收藏本站 |天气与日历| 2025-04-20 星期日 03:45:00 乙巳(蛇)年 三月廿三 寅时 谷雨
     
切换到窄版

私人站点

 找回密码
 立即注册
搜索
查看: 317|回复: 0

IO二

[复制链接]

954

主题

954

帖子

3875

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3875
发表于 2022-3-13 12:05:19 | 显示全部楼层 |阅读模式
一.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.进程的基本控制
                                                        

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|编程站点 ( 冀ICP备2023028127号-2 )|友链申请|

GMT+8, 2025-4-20 03:45 , Processed in 0.089678 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表