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
原创粉丝点击