【C語言】【unix c】兩個程序通過訊息佇列實現程序間的通訊
send.c:
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <string.h>
typedef struct msgbuf{ //函式要求使用者自定義一個結構體
long mtype;
char mtext[128];//預設128個空間
}msg_t;
int main(void) {
key_t key; //為了接收鍵值以確定ID
msg_t mbuf;
key = ftok(".",21); //獲得一個鍵值
if(key == -1) {
perror("ftok");
return -1;
}
printf("key=%x\n",key);
//從核心獲取訊息佇列
int msqid = msgget(key, IPC_CREAT|0664);
if(msqid == -1) {
perror("MSGGET");
return -1 ;
}
printf("msqid=0x%x\n",msqid);
//初始化訊息
mbuf.mtype = 3;
strcpy(mbuf.mtext,"this is a test\n");
//向訊息佇列傳送訊息
int s = msgsnd(msqid, &mbuf, strlen(mbuf.mtext)+1, 0);
if(s == -1) {
perror("msgsnd");
return -1;
}
return 0;
}
命令: [email protected]:~/day/day33$ a.out
結果: key=15081b76
msqid=0x0
命令: [email protected]:~/day$ ipcs //察看當前列對中所佔的大小和訊息數
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 0 tarena 600 393216 2 dest
0x00000000 32769 tarena 600 393216 2 dest
------ Semaphore Arrays --------
key semid owner perms nsems
------ Message Queues --------
key msqid owner perms used-bytes messages
0x15081b76 0 tarena 664 15 1 //執行一次,寫入一次訊息,再執行一次會繼續追加
recv.c:
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <string.h>
typedef struct msgbuf{
long mtype;
char mtext[128];
}msg_t;
int main(void) {
key_t key;
msg_t mbuf;
key = ftok(".",21);
if(key == -1) {
perror("ftok");
return -1;
}
printf("key=%x\n",key);
//從核心獲取訊息佇列
int msqid = msgget(key, IPC_CREAT|0664);
if(msqid == -1) {
perror("MSGGET");
return -1;
}
printf("msqid=0x%x\n",msqid);
//從訊息佇列獲取訊息
int s = msgrcv(msqid, &mbuf, 128, 3, IPC_NOWAIT);//0是沒有訊息阻塞,IPC_NOWAIT是沒有訊息不阻塞
if(s == -1) {
perror("msgrcv");
return -1;
}
printf("%s\n", mbuf.mtext);
return 0;
}
[email protected]:~/day/day33$ rec
key=15081b76
msqid=0x0
this is a test //第一次訊息列對裡有訊息
[email protected]:~/day/day33$ rec
key=15081b76
msqid=0x0
msgrcv: No message of desired type //第二次訊息列對裡沒有訊息,提示沒有訊息。
相關推薦
【C語言】【unix c】兩個程序通過訊息佇列實現程序間的通訊
send.c: #include <stdio.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h>
linux c之通過訊息佇列實現程序通訊
1、訊息佇列的介紹 訊息佇列提供了一種從一個程序向另一個程序傳送一個數據塊的方法。 每個資料塊都被認為含有一個型別,接收程序可以獨立地接收含有不同型別的資料結構。我們可以通過傳送訊息來避免命名管道的同步和阻塞問題。但是訊息佇列與命名管道一樣,每個資料塊都有一個最大長度的限
C語言:一個數組中只有兩個數字是出現一次
1 //1.一個數組中只有兩個數字是出現一次, 2 //其他所有數字都出現了兩次。 3 //找出這兩個數字,程式設計實現。a 4 5 //^=單獨兩個數的^結果 6 //單獨出現的兩個數不同位的標記 7 //position: ^結果中第一個出現1的位置 8 //position位
c語言 用getchar函式讀入兩個字元給c1 c2 用putchar和printf輸出 思考問題
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
C語言中函式呼叫怎麼返回兩個值
在C語言中,函式只能返回一個值,要返回兩個值,可以改換思路,通過其它方式做到。 1 建立陣列,返回指標。 在要返回的兩個值型別相同時,可以用建立陣列的方式,將要返回的值存在陣列中,並返回陣列首地址,這樣就可以實現返回兩個值的效果。 需要注意的是,要返回陣列首地址,那麼返回
使用C語言編寫程式,求任意兩個整數的較大值
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #define max(a,b)((a>b?a:b)) int main() {
C語言生成2000w行資料的兩個實現
以下兩個程式碼均在linux下GCC測試通過 要求: 字串長度為16 字串只能包含大小寫字母和數字 要求生成20000000行的TXT文字/********************************** * Author: Ervin_Zhao(2012.6) *
【C語言中的細節問題】C/C++浮點數在記憶體中的儲存方式
C/C++浮點數在記憶體中的儲存方式 本文轉載自:https://www.cnblogs.com/dolphin0520/archive/2011/10/02/2198280.html 任何資料在記憶體中都是以二進位制
關於指標的筆記【1】【C語言程式設計-譚浩強】
指標是什麼? 一個 變數的地址稱為該變數的"指標"【將地址形象化的稱為“指標”】。(指標是什麼百度百科) 注意區分儲存單元的地址和內容這兩個概念的區別。 直接訪問:直接按變數名進行訪問,直接通過變數名訪問變數內容 間接訪問:將變數a的地址存放到另一個變數b中,然後通過變數b找到變數a的地址,從而訪問變數a
C語言網——【求[X,Y]內被除3餘1並且被除5餘3的整數的和】
題目描述輸入兩個正整數X,Y,求出[X,Y]內被除3餘1並且被除5餘3的整數的和輸入輸入兩個正整數X,Y輸出求所有滿足條件的數的和樣例輸入200 800 樣例輸出20020嗯。。水題,找到第一個符合除3餘1且除5餘3的數後就可以直接用等差數列和算了,因為下一個符合條件的數就是
【c語言趣味程式設計100例】數值轉換
問題:數值轉換 給定一個M進位制的數X 實現對X向任意的一個非M進位制的數的轉換 #include<stdio.h> /* 問題:數值轉換 給定一個M進位制的數X 實現對X向任意的一個非M進位制的數的轉換 **/ #define MAXCHAR 101
【c語言趣味程式設計100例】氣泡排序
氣泡排序: 實現思路: 氣泡排序的思想就是一次迴圈將兩兩數之間相互比較,將較大的數放到後面,一次比較完之後 程式比較的次數就減少一次,依次比較 每比較一次 比較的次數就減少一次。 因此 用兩個for迴圈 外層用來判斷迴圈的次數,內層for迴圈用來比較程
【c語言趣味程式設計100例】最佳存款方案
問題:最佳存款方案 假設銀行一年整除領取的月息為0.63% 現在某人手中有一筆錢,他打算在今後的5年中的 每年年底取出1000元 到第5年時剛好取完 請算出他存錢時應存入多少 程式設計思路: 題目中問的是最初存入的錢數是多少
【c語言趣味程式設計100例】牛頓迭代法c
問題:牛頓法求最優解,本質上就是求f(x)=0的過程,求某個點的方根,本質上是求x^n-m=0的過程,如求f(x)=x^2,當f(x)=3,求x的最優解,就是求x^2-3=0的x的解。 牛頓迭代法求方程的根。 #include<stdio.h>
【c語言趣味程式設計100例】兔子問題
兔子問題: 有一對兔子,從出生後第3個月起每個月都生一對兔子, 小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數? 解題思路:
【c語言趣味程式設計100例】抓交通肇事犯
問題:一輛卡車違反交通規則,撞人後逃跑.現場有三個人目擊事件, 但都沒有記住車牌號.只記下車號的一些特徵.甲說:牌照的前 兩個數字相同;乙說:牌照的後兩個數字相同,但與前兩個不同 ,丙是位數學家,他說:四位的車號剛好是一個整數的平方。 #include<std
【c語言趣味程式設計100例】打魚還是晒網
問題 打魚還是晒網 程式設計思路:三天打魚 兩天晒網 實現的思路主要是要求出輸入的指定的時間和距離1990 01 01這個時間的天數 我們知道年份有閏年和平年之分 閏年2月份是29天 平年2月份28天 因此 定義一個函式runyear()用來判斷程式是否是閏年,這個程式模組化的思想
【c語言趣味程式設計100例】借書方案知多少
1.問題描述 小明有5本書,要借給A B C 這三個小朋友,每人每次只能借一本 則有多少種不同的解法 2.思路:求出不同的組合,用暴力破解 可以實現,只要控制好條件 程式的條件就是 A B C不能是相同的一本書,只
【c語言趣味程式設計100例】百錢百雞問題
1.問題描述 我國古代數學家張丘建在《算經》一書中提出的數學問題:雞翁一值錢五,雞母一值錢三,雞雛三值錢一。百錢買百雞,問雞翁、雞母、雞雛各幾何。 2.程式碼實現思路 思路:我們知道問題求的公雞 母雞 小雞的組合個數
C語言指標【筆記】
C語言指標【筆記】 記憶體和地址 地址與內容 未初始化和非法指標 指標、間接訪問和變數 指標常量 指標的指標 指標表示式 指標變數 定義 記憶體和地址