青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 200, comments - 8, trackbacks - 0, articles - 0

一.IO與文件映射
 1.IO的共享與效率
  read與write其中數(shù)據(jù)緩沖的大小
  讀取數(shù)據(jù)的緩沖大?。篻etpagesize。 
 2.定位與定位讀取(隨機讀取)
  read與write在操作的時候,自動移動讀取位置.
  lseek改變讀取位置.

  pread/pwrite在指定位置讀寫。
  2.1.lseek的函數(shù)說明: 

 off_t   lseek(
                    int fd,//定位文件描述符號
                    off_t off,//定位位置
                    int whence//定位參照點:文件開始位置/文件結(jié)束位置/文件當前位置
                                        
//SEEK_SET    SEEK_END  SEEK_CUR
                    );
 返回:
       返回當前讀取位置在文件中的絕對位置.
  2.2.lseek的作用:定位文件的位置
    問題:lseek的定位的位置超出文件的大小范圍?
    lseek移動位置只要合法,都是有效
  2.3.lseek+write=pwrite
      lseek+read =pread

#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
main()
{
    int fd;
    float score;
    int r;
    int i=0;
    fd=open("stu.dat",O_RDWR);
    if(fd==-1) printf("open error:%m\n"),exit(-1);
        
    //定位
    /*
    for(i=0;i<2;i++)
    {
        r=lseek(fd,i*28,SEEK_SET);    
        r=lseek(fd,24,SEEK_CUR); 
        //r=lseek(fd,i*28+24,SEEK_SET);
        //讀取
        r=read(fd,&score,sizeof(float));
        //打印 輸出
        printf("%.2f\n",score);
    }
*/
    /*
    r=lseek(fd,-100,SEEK_SET);
    printf("%d\n",r);
    //write(fd,"Hello",5);
    
*/
    for(i=0;i<2;i++)
    {
        pread(fd,&score,sizeof(float),i*28+24);
        printf("%.2f\n",score);
        read(fd,&score,sizeof(float));
        printf("%.2f\n",score);
    }
    
    close(fd);
}
2.4.案例:
     讀取一個特殊的文件:
       /proc/${pid}/mem文件程序的虛擬內(nèi)存文件

#include <stdio.h>
#include <stdlib.h> 
#include <fcntl.h>
int a=9999;
main()
{
    char filename[100];
    int fd;
    int data=8888;
    
    //得到文件名
    sprintf(filename,"/proc/%d/mem",getpid());
    //打開文件
    fd=open(filename,O_RDWR);
    if(fd==-1) printf("open error:%m\n"),exit(-1);
    //讀取a地址這個位置的數(shù)據(jù)
    
//pread(fd,&data,4,(int)&a);
    
//lseek(fd,(int)&a,SEEK_SET);
    
//read(fd,&data,4);
    
//write(fd,&data,4);
    pwrite(fd,&data,4,(int)&a);
    printf("%d\n",a);
    
    close(fd);
}
3.文件的其他操作
    fstat獲取文件狀態(tài)
    ftruncate改變文件大小

#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
main()
{
    int fd;
    struct stat st;
    
    fd=open("stu.dat",O_RDONLY);
    if(fd==-1) printf("err:%m\n"),exit(-1);
    
    fstat(fd,&st);
    printf("%d,%o\n",st.st_size,st.st_mode);
    
    close(fd);
}
4.文件映射:
    虛擬地址映射到內(nèi)存。
    虛擬地址可以映射到文件:可以用內(nèi)存方式訪問文件.
    mmap/munmap
  案例:
    1.使用內(nèi)存方式寫入數(shù)據(jù) 

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <string.h>
#include <sys/mman.h>
struct stu
{
    char name[20];
    int  age;
    float score;
};
main()
{
    int fd;
    struct stu *s;//文件在虛擬內(nèi)存的映射首地址
    struct stat st;
    int size;//文件大小
    int count;//記錄條數(shù)
    int i;
    //1.打開文件
    fd=open("newstu.dat",O_RDWR|O_CREAT|O_EXCL,0666);
    if(fd==-1)
    {
        fd=open("newstu.dat",O_RDWR);
        if(fd==-1) printf("::%m\n"),exit(-1);
    }
    //2.得到文件大小,文件記錄條數(shù)
    fstat(fd,&st);
    size=st.st_size;
    count=size/sizeof(struct stu);
    //3.文件大小改變只要在munmap之前調(diào)用都有效    
    
//ftruncate(fd,size+sizeof(struct stu));
    
//4.映射到一個虛擬的地址
    s=mmap(0,size+sizeof(struct stu),
                PROT_READ|PROT_WRITE,
                MAP_SHARED,fd,0);
    //5.把數(shù)據(jù)寫入虛擬地址
    /*
    printf("輸入姓名:");
    scanf("%s",s[count].name);
    printf("輸入年齡:");
    scanf("%d",&(s[count].age));
    printf("輸入成績:");
    scanf("%f",&(s[count].score));
    ftruncate(fd,size+sizeof(struct stu));
    
*/
    for(i=0;i<count;i++)
    {
        printf("%s,\t,%d,\t%.2f\n",
            s[i].name,s[i].age,s[i].score);
    }    
    //6.卸載虛擬地址
    munmap(s,sizeof(struct stu)+size);
    //7.關(guān)閉文件
    close(fd);
}

作業(yè):
  -+
2.使用內(nèi)存方式讀取數(shù)據(jù)
 
二.文件描述符號的操作(IO鎖)
  文件描述符號是整數(shù).文件描述符號對應(yīng)內(nèi)核的上下文環(huán)境. 
  1.dup  dup2拷貝文件描述符號
   dup拷貝文件符號,返回系統(tǒng)指定的整數(shù)
   dup2拷貝文件描述符號,返回用戶指定的整數(shù)
  2.fcntl對文件描述的屬性的修改
    2.1.拷貝文件描述符號
    2.2.修改判定文件的描述標記
    2.3.修改判定文件的狀態(tài)標記
         O_RDONLY O_WRONLY _ORDWR  O_CREAT O_EXCL
         
         O_APPEND O_ASYN
    2.4.設(shè)置強制鎖(重新編譯內(nèi)核)
    2.5.設(shè)置建議鎖(默認)
    2.6.設(shè)置的信號 

三.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

#include <curses.h>
int main()
{
    initscr();//初始化終端
    
//border(0,0,0,0,0,0,0,0);
    box(stdscr,0,0);
    mvhline(2,10,'=',20);
    mvvline(2,10,'|',10);
    refresh();
    //wrefrsh(stdscr);
    getch();//等待一個字符輸入        
    endwin();//釋放終端
    return 0;
}
屬性字符:字節(jié)=屬性字節(jié)+字符字節(jié)
   注意:
     box需要窗體.
     initscr返回被初始化的窗體:標準屏幕WINDOW*
     實際上curses定義一個全局變量stdscr就是標準屏幕 
   函數(shù)命名規(guī)則:
      ****   標準屏幕stdscr
      w****    指定窗體
      mv****  指定位置
      mvw****  指定窗體的指定位置
   2.2.刷屏
     void refresh()   
     void wrefresh(WINDOW*);
     
     從里到外刷屏
   2.3.字符輸出
     addch
     普通字符:''
     屬性字符: '' | 屬性 //位與,屬性可以man attron查看可選屬性    
     
     特殊的屬性字符(特殊形狀):比如ACS_PI

   2.4.字符串輸出
     int addstr(const char *);
   2.5.格式字符串輸出
     int printw(const char*,....);  

#include <curses.h> 
main()
{
    char name[9]={0};
    int r;
    initscr();
    //繪制UI
    mvaddstr(4,10,"用戶:[        ]");
    //輸入
    r=mvgetnstr(4,16,name,8);
    //name[r]=0;
    
//打印輸入
    mvprintw(7,10,"你輸入的是:%s",name);
    refresh();
    //輸入字符    
    getch();
    endwin();
}
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.設(shè)置屬性
      attron()開啟屬性
      attroff()關(guān)閉屬性
      括號里傳入所需要開啟或者關(guān)閉的屬性,      
      如:attron(COLOR_PARE(1));//開啟顏色對1
    這組函數(shù)一定要在initscr后調(diào)用
    
    背景函數(shù):
      bkgd();
#include <curses.h>
#include <time.h>
#include <unistd.h>
void init();
void drawui();
void business();
void destroy();
main()
{
    init();
    drawui();
    business();
    destroy();
}
void business()
{
    time_t tt;
    struct tm *t;
    while(1)
    {
        //取時間
        tt=time(0);
        t=localtime(&tt);
        //顯示時間
        mvprintw(LINES/2,(COLS-8)/2,
            "%02d:%02d:%02d",
            t->tm_hour,t->tm_min,t->tm_sec);
        //刷新屏幕
        refresh();
        sleep(1);
    }
}
void drawui()
{
    box(stdscr,0,0);
}
void destroy()
{
    endwin();
}
void init()
{
    initscr();
}
 2.登錄界面
     1.初始化
     2.繪制界面
        頭
        繪制用戶名輸入?yún)^(qū)
        繪制密碼輸入?yún)^(qū)
        
     3.等待輸入
     4.結(jié)束
#include <curses.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
void init();
void drawLogin();
void destroy();
main()
{
    init();
    drawLogin();
    destroy();
}
void drawLogin()
{
    char *heads="聯(lián)通BSS業(yè)務(wù)支撐系統(tǒng)";
    char *user="用戶[           ]";
    char *pass="口令[           ]";
    
    box(stdscr,0,0);
    attron(A_BOLD);
    mvaddstr(3,(COLS-strlen(heads))/2,heads);
    mvhline(4,(COLS-strlen(heads))/2,0,strlen(heads));
    attroff(A_BOLD);
    mvaddstr(8,(COLS-strlen(user))/2,user);
    mvaddstr(10,(COLS-strlen(pass))/2,pass);
    refresh();
}
void destroy()
{    
    getch();
    endwin();
    
}
void init()
{
    initscr();
}
4.輸入
   1.字符輸入
    int getch();
    返回的是字符
    禁止回顯noecho() //回顯只是輸入以后不會出現(xiàn)在屏幕上,輸入密碼時采用這種方式
    使功能鍵有效,使用keypad(WINDOW*,bool) 

#include <curses.h>
main()
{
    int ch;
    //初始化
    initscr();
    noecho();
    //循環(huán)輸入
    while(1)
    {
        ch=mvgetch(5,10);
        //循環(huán)顯示輸入
        mvprintw(8,10,"你輸入的是:%c(%d)",ch,ch);
    }    
    //釋放
    endwin();
}
案例:
   使用鍵盤控制字母在屏幕上的移動
    
   補充:
     curses屏幕清除:man 3 clear
       clear
       erase 
     光標控制:
       得到光標位置  getsyx
       設(shè)置光標的位置 setsyx
       控制光標是否可見:curs_set();
       
   2.字符串輸入
      int addstr
   
   3.格式數(shù)據(jù)輸入
     scanw
#include <curses.h>
main()
{
    int ch;
    int x=5,y=5;
    initscr();
    keypad(stdscr,TRUE);
    curs_set(0);
    noecho();
    mvaddch(y,x,'A');
    while(1)
    {
        ch=getch();
        //mvaddch(y,x,' ');
        
//clrtoeol();
        erase();
        //clear();
        switch(ch)
        {
        case KEY_UP:
            y--;
            break;
        case KEY_DOWN:
            y++;
            break;
        case KEY_LEFT:
            x--;
            break;
        case KEY_RIGHT:
            x++;
            break;
        }
        mvaddch(y,x,'A');
        refresh();
    }        
    endwin();
}
5.窗口 
   subwin()//創(chuàng)建子窗體(坐標采用標準屏幕坐標)
   derwin()//創(chuàng)建子窗體(坐標采用父窗體坐標)

#include <curses.h>
main()
{
    WINDOW *w;
    initscr();
    box(stdscr,0,0);
    
    w=derwin(stdscr,4,20,5,3);
    box(w,0,0);
    
    refresh();
    wrefresh(w);
    getch();
    endwin();
}

#include <curses.h>
void init();
void drawUi();
void dealInput();
void destroy();
main()
{
    init();
    drawUi();
    dealInput(); 
    destroy();
}
void dealInput()
{
    int a,b;
    while(1)
    {
        mvaddstr(2,3,"     ");
        mvscanw(2,3,"%d",&a);
        mvaddstr(2,11,"     ");
        mvscanw(2,11,"%d",&b);
        mvaddstr(2,19,"      ");
        mvprintw(2,19,"%d",a+b);
        refresh();
    }
}
void drawUi()
{
    mvaddstr(2,2,"[     ]+[     ]=[      ]");
    refresh();
}
void destroy()
{
    endwin();
}
void init()
{
    initscr();
}
1.在vi設(shè)置編碼:
  :set encoding=編碼    gb2312  ios-8859-1  utf-8 
2.在編譯器指定源文件的編碼 -finput-charset=gb2312
3.在終端指定編碼:
4.系統(tǒng)默認編碼
  /etc/sysconfig/i18n配置編碼
  
      
作業(yè):(使用文件映射) 
 1.使用內(nèi)存方式讀取數(shù)據(jù)
 2.使用curses+io完成:圖書信息的錄入
 3.使用curses+io顯示圖書信息:
    每次顯示一條:
    使用up down鍵翻滾記錄數(shù)據(jù)
 4.讀取文件文件,使用curses 顯示.
    實現(xiàn)如下功能:
       上下翻頁功能
       輸入q,結(jié)束功能 

 

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产欧美日韩在线视频| 国产精品国产亚洲精品看不卡15| 欧美高清视频在线| 日韩午夜视频在线观看| 午夜精品网站| 国产综合欧美在线看| 欧美韩日精品| 老司机午夜精品视频| 欧美日韩一区二区高清| 久久天天躁狠狠躁夜夜av| 国产精品成人免费| 久久久久久综合| 99精品久久免费看蜜臀剧情介绍| 麻豆成人在线播放| 久久超碰97人人做人人爱| 国产一区二区你懂的| 亚洲国产精品一区二区第一页| 欧美日韩国产综合视频在线观看中文| 久久久久久久综合日本| 久久精品五月婷婷| 99在线精品视频在线观看| 性欧美1819性猛交| 亚洲激情视频在线观看| 久久久福利视频| 亚洲免费av片| 亚洲精品自在久久| 久久久精品一区| 亚洲三级观看| 一区二区在线视频| 欧美无砖砖区免费| 性18欧美另类| 99re6这里只有精品| 亚洲视频欧洲视频| 欧美性天天影院| 亚洲第一免费播放区| 亚洲欧美日韩在线一区| 久久精品中文字幕一区| 国产性做久久久久久| 欧美一区亚洲二区| 亚洲精品日韩在线观看| 亚洲欧美成人| 亚洲午夜久久久久久久久电影院| 国产毛片精品视频| 老司机aⅴ在线精品导航| 欧美国产1区2区| 91久久精品国产91性色| 国产精品婷婷| 欧美日韩伦理在线| 欧美午夜精品一区| 久久久噜噜噜久噜久久| 亚洲一区二区成人在线观看| 久久精品视频播放| 久热成人在线视频| 亚洲毛片在线看| 午夜精品视频在线观看| 欧美在线视频免费| 亚洲香蕉伊综合在人在线视看| 在线精品国产成人综合| 在线成人h网| 亚洲丶国产丶欧美一区二区三区| 亚洲日本成人女熟在线观看| 亚洲一区成人| 另类国产ts人妖高潮视频| 久久国产欧美精品| 久久精品伊人| 亚洲第一福利视频| 欧美激情在线免费观看| 一区二区三区四区国产| 亚洲毛片av| 亚洲一级二级在线| 国产精品国产三级国产普通话99 | 国产日韩欧美精品一区| 久久aⅴ国产欧美74aaa| 久久婷婷蜜乳一本欲蜜臀| a4yy欧美一区二区三区| 亚洲人成亚洲人成在线观看| 欧美有码在线观看视频| 老牛嫩草一区二区三区日本| 国产日韩欧美高清免费| 欧美精品精品一区| 亚洲国产欧洲综合997久久| 亚洲综合色丁香婷婷六月图片| 久久天天躁狠狠躁夜夜av| 国产精品videossex久久发布| 欧美激情视频一区二区三区在线播放| 久久成人在线| 亚洲在线播放| 久久手机免费观看| 久久影院午夜片一区| 日韩视频在线免费观看| 嫩草成人www欧美| 久久精品成人欧美大片古装| 香蕉视频成人在线观看| 好吊妞这里只有精品| 久久免费高清| 狼人天天伊人久久| 欧美一级专区| 欧美日韩另类一区| 亚洲国产三级| 亚洲国产99精品国自产| 女仆av观看一区| 午夜精品久久久久久久99热浪潮 | 国产日韩精品一区二区三区在线| 久久亚洲美女| 亚洲国产老妈| 久久男人资源视频| 亚洲女女女同性video| 激情欧美一区二区三区在线观看| 久久久国产91| 亚洲狠狠婷婷| 欧美日本韩国| 美女视频黄a大片欧美| 亚洲国产精品久久久久秋霞蜜臀| 亚洲精品视频在线观看网站| 欧美午夜精品一区| 小处雏高清一区二区三区 | 久久久久看片| 伊人伊人伊人久久| 国产精品三上| 久久一区二区三区av| 欧美国产亚洲另类动漫| 亚洲视频中文| 亚洲人成在线免费观看| 国产在线拍偷自揄拍精品| 久久久久久成人| 欧美粗暴jizz性欧美20| 亚洲欧美国产精品桃花| 亚洲大黄网站| 1000部国产精品成人观看| 亚洲国产成人不卡| 欧美视频在线视频| 亚洲欧美成人一区二区在线电影 | 欧美一区二视频在线免费观看| 亚洲桃色在线一区| 国产九区一区在线| 欧美激情一二三区| 香蕉久久夜色精品| 性欧美精品高清| 新67194成人永久网站| 亚洲最新视频在线| 亚洲国产日韩欧美在线99| 亚洲电影天堂av| 亚洲国产一区二区三区a毛片| 欧美护士18xxxxhd| 亚洲国产成人在线播放| 99国内精品久久久久久久软件| 国产精品男人爽免费视频1| 欧美精品一区二区三区蜜桃| 国产精品啊v在线| 欧美日韩黄色一区二区| 欧美福利电影在线观看| 麻豆国产精品va在线观看不卡| 欧美一激情一区二区三区| 老鸭窝毛片一区二区三区| 欧美日韩你懂的| 一区免费观看| 亚洲性图久久| 欧美一激情一区二区三区| 久久综合图片| 久久国产精品99精品国产| 久久久青草青青国产亚洲免观| 欧美黄色aa电影| 黄色成人av| 亚洲一区精品电影| 亚洲三级免费电影| 国产一区二区三区免费观看| 亚洲国产合集| 欧美激情一区二区三区蜜桃视频| 亚洲欧美在线另类| 久久九九国产| 国产欧美在线| 欧美一区二粉嫩精品国产一线天| 久久亚洲综合色一区二区三区| 亚洲影视在线| 久久久一区二区三区| 国语自产偷拍精品视频偷| 亚洲精品欧美极品| 久久成人综合视频| 牛人盗摄一区二区三区视频| 久久riav二区三区| 亚洲精品国精品久久99热一| 欧美一区二区三区精品电影| 免费永久网站黄欧美| 鲁鲁狠狠狠7777一区二区| 亚洲国产婷婷| 欧美黄色精品| 欧美精品电影| 在线日韩欧美| 欧美黄色免费网站| 久久久久se| 亚洲欧美成人网| 亚洲欧洲99久久| 国产在线拍偷自揄拍精品| 老司机久久99久久精品播放免费| 欧美不卡视频一区| 亚洲一区二区欧美| 久久夜色精品国产欧美乱| 久久精品国亚洲| 欧美精品一区二区三区在线看午夜 | 欧美91大片|