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) 用於測試指定的文件描述符是否在該集合中。