• <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>
            隨筆 - 10, 文章 - 1, 評論 - 9, 引用 - 0
            數據加載中……

            select 和pselect的區別

            /* According to POSIX 1003.1-2001 */ 
            #include <sys/select.h>

            /* According to earlier standards */ 
            #include <sys/time.h>
             
            #include <sys/types.h>
             
            #include <unistd.h>

            int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);

            int pselect(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timespec *timeout, const sigset_t *sigmask);

            FD_CLR(int fd, fd_set *set); 
            FD_ISSET(int fd, fd_set *set); 
            FD_SET(int fd, fd_set *set); 
            FD_ZERO(fd_set *set); 
             

            以上是關于selectpselect技術的函數族。

            下面對selectpselect函數原型的說明:

            Selectpselect都是等待一系列的文件描述符(int)的狀態發生變化。

            這兩個函數基本上是一致,但是有三個區別:

            第一點    select函數用的timeout參數,是一個timeval的結構體(包含秒和微秒),然而pselect用的是一個timespec結構體(包含秒和納秒)

            第二點    select函數可能會為了指示還剩多長時間而更新timeout參數,然而pselect不會改變timeout參數

            第三點    select函數沒有sigmask參數,當pselectsigmask參數為null時,兩者行為時一致的。

            三個獨立的文件描述符集合將會被監視,在readset中的文件描述符將會被監視是不是可讀,就是說讀這個文件描述符是否會發生阻塞。同理writeset集合將會被監視寫過程是不是會被阻塞,exceptfds 將會被監視是否會發生異常。函數退出的時候,這些文件描述符集合將會發生改變用于標示文件描述符的狀態變化。

            有四個宏函數是用于提供多工集合監視的:FD_ZERO用以清空一個集合,FD_SETFD_CLR是用來從一個集合中添加和刪除一個文件描述符,FD_ISSET是用來測試一個文件描述符是不是在一個集合中。

             

             

            EXAMPLE

            #include <stdio.h>

            #include <sys/time.h>

            #include <sys/types.h>

            #include <unistd.h>

             

            int

            main(void) {

                fd_set rfds;

                struct timeval tv;

                int retval;

             

                /* Watch stdin (fd 0) to see when it has input. */

                FD_ZERO(&rfds);

                FD_SET(0, &rfds);

                /* Wait up to five seconds. */

                tv.tv_sec = 5;

                tv.tv_usec = 0;

             

                retval = select(1, &rfds, NULL, NULL, &tv);

                /* Don't rely on the value of tv now! */

             

                if (retval == -1)

                    perror("select()");

                else if (retval)

                    printf("Data is available now.\n");

                    /* FD_ISSET(0, &rfds) will be true. */

                else

                    printf("No data within five seconds.\n");

             

                return 0;

            }

             

            posted on 2011-06-27 23:04 Roger 閱讀(6666) 評論(1)  編輯 收藏 引用

            評論

            # re: select 和pselect的區別[未登錄]  回復  更多評論   

            這超過來超過去TTMD的 沒意思
            2011-11-01 21:08 | 小石
            人人狠狠综合久久亚洲婷婷| 久久久精品无码专区不卡| 久久久久亚洲av成人网人人软件 | 久久最新精品国产| 国产高潮国产高潮久久久91 | 久久久久免费精品国产| 久久亚洲精品无码播放| 少妇内射兰兰久久| 伊人丁香狠狠色综合久久| 三级三级久久三级久久| 日本精品久久久久中文字幕8| 久久综合五月丁香久久激情| 国产精品久久久久影院色| 久久无码国产| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 国内精品欧美久久精品| 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 亚洲国产精品18久久久久久| 大美女久久久久久j久久| 久久久久久午夜成人影院| 欧美午夜精品久久久久久浪潮| 国产精品一久久香蕉国产线看观看| 亚洲国产精品无码久久久久久曰 | 漂亮人妻被中出中文字幕久久| 伊人久久大香线焦综合四虎| 久久精品一区二区国产| 亚洲欧美伊人久久综合一区二区| 久久亚洲av无码精品浪潮| 久久美女网站免费| 99久久免费国产特黄| 久久久久99精品成人片欧美| 波多野结衣AV无码久久一区| 少妇人妻综合久久中文字幕| 免费一级做a爰片久久毛片潮| 国产91久久综合| 久久精品亚洲福利| 久久精品国产99久久丝袜| 久久99久久成人免费播放| 久久久精品日本一区二区三区 | 999久久久无码国产精品| 99久久精品日本一区二区免费|