1. 程式人生 > >2014025688 《嵌入式程序設計》第七周學習總結

2014025688 《嵌入式程序設計》第七周學習總結

mem 類型 對象 mil 不同 輸入 子shell out con

2014025688(30) 《嵌入式程序設計》第七周學習總結

有名管道

FIFO也稱為有名管道,它是一種文件類型。FIFO簡單理解,就是它能把兩個不相關的進程聯系起來,FIFO就像一個公共通道,解決了不同進程之間的“代溝”。普通的無名管道只能讓相關的進程進行溝通(比如父shell和子shell之間)。FIFO嚴格遵循先進先出(first in first out),對管道及FIFO的讀總是從開始處返回數據,對它們的寫則把數據添加到末尾。它們不支持諸如lseek()等文件定位操作。FIFO往往都是多個寫進程,一個讀進程。

讀進程:

若管道是阻塞打開,且當前FIFO內沒有數據,則對讀進程而言將一直阻塞到有數據寫入。

若該管道是非阻塞打開的,則不論FIFO內是否有數據,讀進程都會立即執行讀操作。即如果FIFO內沒有數據,則讀函數講立即返回0;

寫進程:

若該管道是阻塞打開,則寫操作講一直阻塞到數據可以被寫入;

若改管道是非阻塞打開而不能寫入全部數據,則讀操作進行部分寫入或調用失敗。

消息對列:消息對列的實現包括創建或打開對列、添加信息、讀取信息、控制信息4種操作。

msgget():創建或打開對列,創建的消息對列數量會收到系統消息對列的限制;

msgsnd():添加函數,把消息添加到已打開消息對列末尾;

msgrcv():讀取函數,把消息從消息對列種取走,可以指定取走某一種消息;

msgctl():控制函數,可以完成多項功能;

mkfifo函數

mkfifo()函數原型是:
int mkfifo(const char * filename,mode_t mode)
filename指的是要創建的管道。
mode是規定讀寫權限的。
FIFO相關的出錯信息
技術分享
access函數

access()函數原型為:

int access(const char filename, int amode);
filename表示需要測試的文件
amode表示操作模式
sscanf函數
sscanf()函數的原型是:
sscanf(argv[1], "%s", buff);
sscanf函數是以固定字符串為輸入源輸入的

memset函數
memset()函數原型為:
extern void memset(void buffer, int c, int count)
buffer:為指針或是數組,
c:是賦給buffer的值,
count:是buffer的長度.
Memset 用來對一段內存空間全部設置為某個字符,一般用在對定義的字符串進行初始化為‘ ’或‘/0’;
msgget函數
msgget()函數原型為:
int msgget ( key_t key, int msgflg )
key是消息隊列對象的關鍵字(key),函數將它與已有的消息隊列對象的關鍵字進行比較來判斷消息隊列對象是否已經創建
msgflg是權限標誌位。
msgsnd函數
msgsnd()函數原型為:
int msgsnd(int msqid, const void msgp, size_t msgsz, int msgflg)
msqid:消息隊列的隊列 ID
msgp:指向消息結構的指針。
msgsz:消息正文的字節數(不包括消息類型指針變量)
msgflg:若為IPC_NOWAIT 若消息無法立即發送(比如:當前消息隊列已滿),函數會立即返回。若為0: msgsnd 調阻塞直到發送成功為止。
msgrcv函數
msgrcv()函數原型為:
int msgrcv(int msgid, void *msgp, size_t msgsz, long int msgtyp, int msgflg)
msqid:消息隊列的隊列 ID
msgp:消息緩沖區, 同於 msgsnd()函數的 msgp
msgsz:消息正文的字節數(不包括消息類型指針變量)
msgtyp:0:接收消息隊列中第一個消息;大於 0:接收消息隊列中第一個類型為 msgtyp 的消息;小於 0:接收消息隊列中第一個類型值不小於 msgtyp 絕對值
且類型值又最小的消息
msgflg:MSG_NOERROR:若返回的消息比 msgsz 字節多,則消息就會截短到 msgsz 字節,且不通知消息發送進程;IPC_NOWAIT 若在消息隊列中並沒有相應類型的消息可以接收,則函數立即返回;0: msgsnd()調用阻塞直到接收一條相應類型的消息為止。

教材學習中的問題和解決過程

沒有仔細閱讀代碼發現需要兩個標簽運行程序

課後作業中的問題和解決過程

消息隊列要先發送消息才能接收

2014025688 《嵌入式程序設計》第七周學習總結