新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > linux基礎復習(6)文件I/O操作

        linux基礎復習(6)文件I/O操作

        作者: 時間:2016-10-08 來源:網絡 收藏

        struct timeval

        {

        long tv_sec; /* seconds */

        long tv_usec; /* and microseconds */

        };

        select函數根據希望進行的文件操作對文件描述符進行分類處理,這里,對文件描述符的處理主要設計4個宏函數:

        FD_ZERO(fd_set *set) 清除一個文件描述符集;

        FD_SET(int fd, fd_set *set) 將一個文件描述符加入文件描述符集中;

        FD_CLR(int fd, fd_set *set) 將一個文件描述符從文件描述符集中清除;

        FD_ISSET(int fd, fd_set *set) 測試該集中的一個給定位是否有變化;

        在使用select函數之前,首先使用FD_ZERO和FD_SET來初始化文件描述符集,并使用select函數時,可循環使用FD_ISSET測試描述符集, 在執行完成對相關的文件描述符后, 使用FD_CLR來清除描述符集。

        實例

        /*select.c*/

        #i nclude fcntl.h>

        #i nclude stdio.h>

        #i nclude unistd.h>

        #i nclude stdlib.h>

        #i nclude sys/time.h>

        int main(void)

        {

        int fds[2];

        char buf[7];

        int i,rc,maxfd;

        fd_set inset1,inset2;

        struct timeval tv;

        if((fds[0] = open (hello1, O_RDWR|O_CREAT,0666))0)

        perror(open hello1);

        if((fds[1] = open (hello2, O_RDWR|O_CREAT,0666))0)

        perror(open hello2);

        if((rc = write(fds[0],Hello!n,7)))

        printf(rc=%dn,rc);

        lseek(fds[0],0,SEEK_SET);

        maxfd = fds[0]>fds[1] ? fds[0] : fds[1];

        //初始化讀集合 inset1,并在讀集合中加入相應的描述集

        FD_ZERO(inset1);

        FD_SET(fds[0],inset1);

        //初始化寫集合 inset2,并在寫集合中加入相應的描述集

        FD_ZERO(inset2);

        FD_SET(fds[1],inset2);

        tv.tv_sec=2;

        tv.tv_usec=0;

        // 循環測試該文件描述符是否準備就緒,并調用 select 函數對相關文件描述符做相應操作

        while(FD_ISSET(fds[0],inset1)||FD_ISSET(fds[1],inset2))

        {

        if(select(maxfd+1,inset1,inset2,NULL,tv)0)

        perror(select);

        else{

        if(FD_ISSET(fds[0],inset1))

        {

        rc = read(fds[0],buf,7);

        if(rc>0)

        {

        buf[rc]='

        主站蜘蛛池模板: 应城市| 封开县| 永福县| 甘谷县| 精河县| 新蔡县| 宣化县| 禹城市| 茶陵县| 呼图壁县| 马山县| 措美县| 凤翔县| 伽师县| 龙游县| 淄博市| 鄂尔多斯市| 广德县| 长岛县| 循化| 斗六市| 昭平县| 夏邑县| 肃宁县| 黔西| 四川省| 乌审旗| 清镇市| 新竹县| 大余县| 酒泉市| 乌海市| 广宁县| 祥云县| 昆山市| 周宁县| 驻马店市| 大渡口区| 临夏县| 台中市| 桃园县|