RILD必備Linux基礎

1、RILD中使用的Linux系統調用程序員

umask:默認建立目錄或文件時屏蔽某些位數組

umask(S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH | S_IWOTH | S_IXOTH);

S_IRUSR 用戶讀數據結構

S_IWUSR 用戶寫socket

S_IXUSR 用戶執行oop

S_IRGRP 組讀測試

S_IWGRP 組寫code

S_IXGRP 組執行進程

S_IROTH 其餘讀事件

S_IWOTH 其餘寫ip

S_IXOTH 其餘執行

pipe: pipe()會創建管道,並將文件描述詞由參數filedes數組返回。
              filedes[0]爲管道里的讀取端
              filedes[1]則爲管道的寫入端。

eventLoop(void *param) {
    int ret;
    int filedes[2];

    ril_event_init();

    pthread_mutex_lock(&s_startupMutex);

    s_started = 1;
    pthread_cond_broadcast(&s_startupCond);

    pthread_mutex_unlock(&s_startupMutex);

    ret = pipe(filedes);//建立管道,返回讀寫文件描述符

    if (ret < 0) {
        RLOGE("Error in pipe() errno:%d", errno);
        return NULL;
    }

    s_fdWakeupRead = filedes[0];
    s_fdWakeupWrite = filedes[1];

    fcntl(s_fdWakeupRead, F_SETFL, O_NONBLOCK);//設置管道爲非阻塞

pthread家族:參照另外一篇博客

select:

select()機制中提供一fd_set的數據結構,其實是一long類型的數組,每個數組元素都能與一打開的文件句柄(無論是socket句柄,仍是其餘文件或命名管道或設備句柄)創建聯繫,創建聯繫的工做由程序員完成,當調用select()時,內核根據IO狀態修改fd_set的內容,由此來通知執行了select()的進程哪一socket或文件發生了可讀或可寫事件。

對select理解的關鍵就在於對fd_set的理解,而對這個結構體的操做由下面四個宏完成

對於fd_set類型經過下面四個宏來操做:     FD_ZERO(fd_set *fdset) 將指定的文件描述符集清空,在對文件描述符集合進行設置前,必須對其進行初始化,若是不清空,因爲在系統分配內存空間後,一般並不做清空處理,因此結果是不可知的。     FD_SET(fd_set *fdset) 用於在文件描述符集合中增長一個新的文件描述符。     FD_CLR(fd_set *fdset) 用於在文件描述符集合中刪除一個文件描述符。     FD_ISSET(int fd,fd_set *fdset) 用於測試指定的文件描述符是否在該集合中。

相關文章
相關標籤/搜索