日韩在线免费播放-日韩在线免费av-日韩在线免费-日韩在线毛片-国产高清不卡视频-国产高清不卡

當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 學(xué)習(xí)筆記 > 嵌入式學(xué)習(xí)筆記:linux進(jìn)程間通信-消息隊(duì)列、信號(hào)集

嵌入式學(xué)習(xí)筆記:linux進(jìn)程間通信-消息隊(duì)列、信號(hào)集 時(shí)間:2018-09-26      來源:未知

消息隊(duì)列

概述

$消息隊(duì)列是消息的鏈接表,包括Posix 消息隊(duì)列systemV 消息隊(duì)列。系統(tǒng)V消息隊(duì)列是隨內(nèi)核持續(xù)的,只有在內(nèi)核重起或人工刪除時(shí),該消息隊(duì)列才會(huì)被刪除。目前被大量使

用。

$用戶可以從消息隊(duì)列中添加和讀取消息。具有一定的FIFO特性,但可以實(shí)現(xiàn)消息的隨機(jī)查詢

$這些消息存在于內(nèi)核中,由“隊(duì)列ID”來標(biāo)識(shí)

¨消息隊(duì)列的實(shí)現(xiàn)

$消息隊(duì)列的實(shí)現(xiàn)包括創(chuàng)建和打開消息隊(duì)列、添加消息、讀取消息和控制消息隊(duì)列

$創(chuàng)建或打開消息隊(duì)列:msgget。這里創(chuàng)建的消息隊(duì)列的數(shù)量會(huì)受到消息隊(duì)列數(shù)量的

限制

$添加消息:msgsnd函數(shù),它把消息添加到已打開的消息隊(duì)列末尾

$讀取消息:msgrcv,它把消息從隊(duì)列中取走,與FIFO不同的是,這里可以指定取走

某一條消息

$控制消息隊(duì)列:msgctl

有關(guān)的數(shù)據(jù)結(jié)構(gòu):

Øipc_perm:IPC對象的訪問權(quán)限

Ømsgbuf:消息的數(shù)據(jù)類型

Ømsg:消息鏈表的節(jié)點(diǎn)結(jié)構(gòu)

Ømsgqid_ds:消息隊(duì)列對象的結(jié)構(gòu)

消息隊(duì)列相關(guān)函數(shù): *****

#include

#include

#include

int msgget(key_t key, int flg);

入?yún)ⅲ?key:和消息隊(duì)列關(guān)聯(lián)的key值

flg:消息隊(duì)列的訪問權(quán)限

IPC_CREAT、創(chuàng)建新的消息隊(duì)列

IPC_EXCL,與IPC_CREAT一起使用;如果要?jiǎng)?chuàng)建的消息隊(duì)列已經(jīng)存在,則返

回錯(cuò)誤

IPC_NOWAIT讀寫消息隊(duì)列要求無法得到滿足時(shí),不阻塞。

返回值: 成功 返回消息隊(duì)列 ID

失敗 -1

int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);

功能:向消息隊(duì)列發(fā)送消息

入?yún)ⅲ?msqid:消息隊(duì)列的ID 即msgget的返回值

msgp:指向消息的指針。常用消息結(jié)構(gòu)msgbuf如下:

struct msgbuf

{

long mtype;

//消息類型

char mtext[N]

//消息正文

};

msgsz:發(fā)送的消息正文的字節(jié)數(shù)

msgflg: IPC_NOWAIT 消息沒發(fā)送完立即返回

0 消息發(fā)送完成函數(shù)才會(huì)返回

返回值:

成功 0

失敗 -1

int msgrcv(int msgid, void* msgp, size_t size, long msgtype, int flag); 功能: 從msqid代表的消息隊(duì)列中讀取一個(gè)msgtyp類型的消息,并把消息存儲(chǔ)在msgp指向的msgbuf結(jié)構(gòu)中。在成功讀取了一條消息以后,隊(duì)列中的這條消息將被刪除入?yún)ⅲ?msqid:消息隊(duì)列的ID

msgp:接收消息的緩沖區(qū)

size:要接收的消息的正文字節(jié)數(shù)

msgtype: 0 :接收消息隊(duì)列中第一個(gè)消息

>0: 接收mtype為msgtype第一個(gè)消息

<0: 接收消息隊(duì)列中mtype不小于msgtype的絕對值,

且mtype最小的消息

flag: 0: 沒有收到消息就會(huì)一直阻塞

IPC_NOWAIT :沒有收到消息會(huì)立即返回

返回值: 成功:接收到的消息的長度

失敗:-1

int msgctl ( int msgqid, int cmd, struct msqid_ds *buf ); 入?yún)ⅲ?msqid:消息隊(duì)列的隊(duì)列ID

cmd: IPC_STAT:讀取消息隊(duì)列的屬性,并將其保存在buf指向的緩

沖區(qū)中。

IPC_SET:設(shè)置消息隊(duì)列的屬性。這個(gè)值取自buf參數(shù)

IPC_RMID:從系統(tǒng)中刪除消息隊(duì)列。,buf 填NULL

buf:消息隊(duì)列緩沖區(qū)

返回值: 成功 0

失敗 -1

信號(hào)燈集(signal set):由一個(gè)或多個(gè)信號(hào)量構(gòu)成的集合

#include

#include

#include

int semget(key_t key, int nsems, int semflg);//創(chuàng)建信號(hào)量入?yún)ⅲ?key ftok獲取的key值

nsems 信號(hào)燈集中包含的信號(hào)燈數(shù)目

semflg:同消息隊(duì)列

返回值: 成功:信號(hào)燈集的ID號(hào)(IPC標(biāo)識(shí)符)

失敗 -1

int semop ( int semid, struct sembuf *opsptr, size_t nops); 入?yún)ⅲ?semid semget的返回值,ID號(hào)

opsptr :結(jié)構(gòu)體指針,指明對哪個(gè)信號(hào)燈進(jìn)行操作 nops: 要操作的信號(hào)燈的個(gè)數(shù)

struct sembuf

{

short

sem_num;

//

要操作的信號(hào)燈的編號(hào)

short

sem_op;

0 :

等待,直到信號(hào)燈的值變成0

1 : 釋放資源,V操作

short

sem_flg;

// 0,

-1 : 分配資源,P操作

IPC_NOWAIT, SEM_UNDO

};

返回值:

成功 0

失敗 -1

int semctl ( int semid, int semnum, int cmd…/*union semun arg*/); 入?yún)ⅲ?semid: 信號(hào)燈集的ID號(hào)

semnum: 要修改的信號(hào)燈編號(hào)

cmd: GETVAL:獲取信號(hào)燈的值

SETVAL:設(shè)置信號(hào)燈的值

IPC_RMID:從系統(tǒng)中刪除信號(hào)燈集合

注意:semctl是可變參數(shù)函數(shù):cmd為GETVAL或SETVAL時(shí),需要傳遞第四個(gè)參數(shù)。參數(shù)類型為union semun

成功: 0 失敗 : -1

union semun

{

int val; /* value for SETVAL */

structsemid_ds *buf;/* buffer for IPC_STAT & IPC_SET */

unsigned short*array;/* array for GETALL & SETALL */

structseminfo*__buf;/* buffer for IPC_INFO */

void *__pad;

};

頭文件中的#ifndef

千萬不要忽略了頭件的中的#ifndef,這是一個(gè)很關(guān)鍵的東西。比如你有兩個(gè)C文件,這兩個(gè)C文件都include了同一個(gè)頭文件。而編譯時(shí),這兩個(gè)C文件要一同編譯成一個(gè)可運(yùn)行文件,于是問題來了,大量的聲明沖突。

還是把頭文件的內(nèi)容都放在#ifndef和#endif中吧。不管你的頭文件會(huì)不會(huì)被多個(gè)文件引用,你都要加上這個(gè)。一般格式是這樣的:

#ifndef <標(biāo)識(shí)>

#define <標(biāo)識(shí)>

......

......

#endif

上一篇:嵌入式學(xué)習(xí)筆記: c語言入門自學(xué)知識(shí)點(diǎn)

下一篇:嵌入式學(xué)習(xí)筆記:linux進(jìn)程通信之信號(hào)函數(shù)

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5京公海網(wǎng)安備11010802025203號(hào)

回到頂部

主站蜘蛛池模板: 挖掘机动画片儿童| 山西卫视直播高清在线直播| 泰坦尼克号演员| 乙亥北行日记| 黑帮大佬和我的第365天| 寡妇电影完整版免费观看| 王少| 克拉之恋 电视剧| 爱情最美丽 电视剧| 丁丁历险记电影| 风筝 电影| 邓家佳电影| 都市频道在线直播观看| 炊事班班长述职报告| 色戒在线观看视频| 许戈辉个人资料简介| 《狂赌之渊》动漫| 杯弓蛇影读后感| 李天方| 电影百鸟朝凤免费完整版| 戚继光电影| 美术《对称的美》| 生死千里| 电影喜剧明星演员表| 浙江卫视回放观看入口| 西班牙女郎| 新生儿喂奶粉的量和时间| 《平凡之路》电影| 变形金刚6免费完整版在线观看| 时来运转电影| 动物园作文| 姬他演过的电视剧和电影| 雅马哈调音台说明书| 廊桥遗梦演员表| 菲律宾电影泡沫| 乙亥北行日记| 柚子猫卡夫卡的心理暗示在线观看 | 新亮剑40集免费观看完整版高清| 吾凰在上动漫在线观看免费| 爱播| 十三刺客|