真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

linux看消息隊(duì)列命令,linux查看消息隊(duì)列中消息

基本linux命令

基本linux命令有哪些呢?

利辛網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)公司從2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司

1、ls命令

就是 list 的縮寫,通過 ls 命令不僅可以查看 linux 文件夾包含的文件,而且可以查看文件權(quán)限(包括目錄、文件夾、文件權(quán)限)查看目錄信息等等。

常用參數(shù)搭配:

ls -a 列出目錄所有文件,包含以.開始的隱藏文件

ls -A 列出除.及..的其它文件

ls -r 反序排列

ls -t 以文件修改時(shí)間排序

ls -S 以文件大小排序

ls -h 以易讀大小顯示

ls -l 除了文件名之外,還將文件的權(quán)限、所有者、文件大小等信息詳細(xì)列出來

實(shí)例:

(1) 按易讀方式按時(shí)間反序排序,并顯示文件詳細(xì)信息

ls -lhrt

(2) 按大小反序顯示文件詳細(xì)信息

ls -lrS

(3)列出當(dāng)前目錄中所有以"t"開頭的目錄的詳細(xì)內(nèi)容

ls -l t*

(4) 列出文件絕對(duì)路徑(不包含隱藏文件)

ls | sed "s:^:`pwd`/:"

(5) 列出文件絕對(duì)路徑(包含隱藏文件)

find $pwd -maxdepth 1 | xargs ls -ld

2、cd 命令

cd(changeDirectory) 命令語法:

cd [目錄名]

說明:切換當(dāng)前目錄至 dirName。

實(shí)例:

(1)進(jìn)入要目錄

cd /

(2)進(jìn)入 "home" 目錄

cd ~

(3)進(jìn)入上一次工作路徑

cd -

(4)把上個(gè)命令的參數(shù)作為cd參數(shù)使用。

cd !$

3、pwd 命令

pwd 命令用于查看當(dāng)前工作目錄路徑。

實(shí)例:

(1)查看當(dāng)前路徑

pwd

(2)查看軟鏈接的實(shí)際路徑

pwd -P

4、mkdir 命令

mkdir 命令用于創(chuàng)建文件夾。

可用選項(xiàng):

-m: 對(duì)新建目錄設(shè)置存取權(quán)限,也可以用 chmod 命令設(shè)置;

-p: 可以是一個(gè)路徑名稱。此時(shí)若路徑中的某些目錄尚不存在,加上此選項(xiàng)后,系統(tǒng)將自動(dòng)建立好那些尚不在的目錄,即一次可以建立多個(gè)目錄。

實(shí)例:

(1)當(dāng)前工作目錄下創(chuàng)建名為 t的文件夾

mkdir t

(2)在 tmp 目錄下創(chuàng)建路徑為 test/t1/t 的目錄,若不存在,則創(chuàng)建:

mkdir -p /tmp/test/t1/t

5、rm 命令

刪除一個(gè)目錄中的一個(gè)或多個(gè)文件或目錄,如果沒有使用 -r 選項(xiàng),則 rm 不會(huì)刪除目錄。如果使用 rm 來刪除文件,通常仍可以將該文件恢復(fù)原狀。

rm [選項(xiàng)] 文件…

實(shí)例:

(1)刪除任何 .log 文件,刪除前逐一詢問確認(rèn):

rm -i *.log

(2)刪除 test 子目錄及子目錄中所有檔案刪除,并且不用一一確認(rèn):

rm -rf test

(3)刪除以 -f 開頭的文件

rm -- -f*

6、rmdir 命令

從一個(gè)目錄中刪除一個(gè)或多個(gè)子目錄項(xiàng),刪除某目錄時(shí)也必須具有對(duì)其父目錄的寫權(quán)限。

注意:不能刪除非空目錄

實(shí)例:

(1)當(dāng) parent 子目錄被刪除后使它也成為空目錄的話,則順便一并刪除:

rmdir -p parent/child/child11

7、mv 命令

移動(dòng)文件或修改文件名,根據(jù)第二參數(shù)類型(如目錄,則移動(dòng)文件;如為文件則重命令該文件)。

當(dāng)?shù)诙€(gè)參數(shù)為目錄時(shí),第一個(gè)參數(shù)可以是多個(gè)以空格分隔的文件或目錄,然后移動(dòng)第一個(gè)參數(shù)指定的多個(gè)文件到第二個(gè)參數(shù)指定的目錄中。

實(shí)例:

(1)將文件 test.log 重命名為 test1.txt

mv test.log test1.txt

(2)將文件 log1.txt,log2.txt,log3.txt 移動(dòng)到根的 test3 目錄中

mv llog1.txt log2.txt log3.txt /test3

(3)將文件 file1 改名為 file2,如果 file2 已經(jīng)存在,則詢問是否覆蓋

mv -i log1.txt log2.txt

(4)移動(dòng)當(dāng)前文件夾下的所有文件到上一級(jí)目錄

mv * ../

8、cp 命令

將源文件復(fù)制至目標(biāo)文件,或?qū)⒍鄠€(gè)源文件復(fù)制至目標(biāo)目錄。

注意:命令行復(fù)制,如果目標(biāo)文件已經(jīng)存在會(huì)提示是否覆蓋,而在 shell 腳本中,如果不加 -i 參數(shù),則不會(huì)提示,而是直接覆蓋!

-i 提示

-r 復(fù)制目錄及目錄內(nèi)所有項(xiàng)目

-a 復(fù)制的文件與原文件時(shí)間一樣

實(shí)例:

(1)復(fù)制 a.txt 到 test 目錄下,保持原文件時(shí)間,如果原文件存在提示是否覆蓋。

cp -ai a.txt test

(2)為 a.txt 建議一個(gè)鏈接(快捷方式)

cp -s a.txt link_a.txt

9、cat 命令

cat 主要有三大功能:

1.一次顯示整個(gè)文件:

cat filename

2.從鍵盤創(chuàng)建一個(gè)文件:

cat filename

只能創(chuàng)建新文件,不能編輯已有文件。

3.將幾個(gè)文件合并為一個(gè)文件:

cat file1 file2 file

-b 對(duì)非空輸出行號(hào)

-n 輸出所有行號(hào)

實(shí)例:

(1)把 log2012.log 的文件內(nèi)容加上行號(hào)后輸入 log2013.log 這個(gè)文件里

cat -n log2012.log log2013.log

(2)把 log2012.log 和 log2013.log 的文件內(nèi)容加上行號(hào)(空白行不加)之后將內(nèi)容附加到 log.log 里

cat -b log2012.log log2013.log log.log

(3)使用 here doc 生成新文件

cat log.txt EOF

Hello

World

PWD=$(pwd)

EOF

ls -l log.txt

cat log.txt

Hello

World

PWD=/opt/soft/test

(4)反向列示

tac log.txt

PWD=/opt/soft/test

World

Hello

10、more 命令

功能類似于 cat, more 會(huì)以一頁一頁的顯示方便使用者逐頁閱讀,而最基本的指令就是按空白鍵(space)就往下一頁顯示,按 b 鍵就會(huì)往回(back)一頁顯示。

命令參數(shù):

+n 從笫 n 行開始顯示

-n 定義屏幕大小為n行

+/pattern 在每個(gè)檔案顯示前搜尋該字串(pattern),然后從該字串前兩行之后開始顯示

-c 從頂部清屏,然后顯示

-d 提示“Press space to continue,’q’ to quit(按空格鍵繼續(xù),按q鍵退出)”,禁用響鈴功能

-l 忽略Ctrl+l(換頁)字符

-p 通過清除窗口而不是滾屏來對(duì)文件進(jìn)行換頁,與-c選項(xiàng)相似

-s 把連續(xù)的多個(gè)空行顯示為一行

-u 把文件內(nèi)容中的下畫線去掉

常用操作命令:

Enter 向下 n 行,需要定義。默認(rèn)為 1 行

Ctrl+F 向下滾動(dòng)一屏

空格鍵 向下滾動(dòng)一屏

Ctrl+B 返回上一屏

= 輸出當(dāng)前行的行號(hào)

:f 輸出文件名和當(dāng)前行的行號(hào)

V 調(diào)用vi編輯器

!命令 調(diào)用Shell,并執(zhí)行命令

q 退出more

實(shí)例:

(1)顯示文件中從第3行起的內(nèi)容

more +3 text.txt

(2)在所列出文件目錄詳細(xì)信息,借助管道使每次顯示 5 行

ls -l | more -5

按空格顯示下 5 行。

11、less 命令

less 與 more 類似,但使用 less 可以隨意瀏覽文件,而 more 僅能向前移動(dòng),卻不能向后移動(dòng),而且 less 在查看之前不會(huì)加載整個(gè)文件。

常用命令參數(shù):

-i 忽略搜索時(shí)的大小寫

-N 顯示每行的行號(hào)

-o 文件名 將less 輸出的內(nèi)容在指定文件中保存起來

-s 顯示連續(xù)空行為一行

/字符串:向下搜索“字符串”的功能

?字符串:向上搜索“字符串”的功能

n:重復(fù)前一個(gè)搜索(與 / 或 ? 有關(guān))

N:反向重復(fù)前一個(gè)搜索(與 / 或 ? 有關(guān))

-x 數(shù)字 將“tab”鍵顯示為規(guī)定的數(shù)字空格

b 向后翻一頁

d 向后翻半頁

h 顯示幫助界面

Q 退出less 命令

u 向前滾動(dòng)半頁

y 向前滾動(dòng)一行

空格鍵 滾動(dòng)一行

回車鍵 滾動(dòng)一頁

[pagedown]: 向下翻動(dòng)一頁

[pageup]: 向上翻動(dòng)一頁

實(shí)例:

(1)ps 查看進(jìn)程信息并通過 less 分頁顯示

ps -aux | less -N

(2)查看多個(gè)文件

less 1.log 2.log

可以使用 n 查看下一個(gè),使用 p 查看前一個(gè)。

12、head 命令

head 用來顯示檔案的開頭至標(biāo)準(zhǔn)輸出中,默認(rèn) head 命令打印其相應(yīng)文件的開頭 10 行。

常用參數(shù):

-n行數(shù) 顯示的行數(shù)(行數(shù)為復(fù)數(shù)表示從最后向前數(shù))

實(shí)例:

(1)顯示 1.log 文件中前 20 行

head 1.log -n 20

(2)顯示 1.log 文件前 20 字節(jié)

head -c 20 log2014.log

(3)顯示 t.log最后 10 行

head -n -10 t.log

13、tail 命令

用于顯示指定文件末尾內(nèi)容,不指定文件時(shí),作為輸入信息進(jìn)行處理。常用查看日志文件。

常用參數(shù):

-f 循環(huán)讀?。ǔS糜诓榭催f增的日志文件)

-n行數(shù) 顯示行數(shù)(從后向前)

(1)循環(huán)讀取逐漸增加的文件內(nèi)容

ping 127.0.0.1 ping.log

后臺(tái)運(yùn)行:可使用 jobs -l 查看,也可使用 fg 將其移到前臺(tái)運(yùn)行。

tail -f ping.log

(查看日志)

14、which 命令

在 linux 要查找某個(gè)文件,但不知道放在哪里了,可以使用下面的一些命令來搜索:

which 查看可執(zhí)行文件的位置。

whereis 查看文件的位置。

locate 配合數(shù)據(jù)庫查看文件位置。

find 實(shí)際搜尋硬盤查詢文件名稱。

which 是在 PATH 就是指定的路徑中,搜索某個(gè)系統(tǒng)命令的位置,并返回第一個(gè)搜索結(jié)果。使用 which 命令,就可以看到某個(gè)系統(tǒng)命令是否存在,以及執(zhí)行的到底是哪一個(gè)位置的命令。

常用參數(shù):

-n  指定文件名長(zhǎng)度,指定的長(zhǎng)度必須大于或等于所有文件中最長(zhǎng)的文件名。

實(shí)例:

(1)查看 ls 命令是否存在,執(zhí)行哪個(gè)

which ls

(2)查看 which

which which

(3)查看 cd

which cd(顯示不存在,因?yàn)?cd 是內(nèi)建命令,而 which 查找顯示是 PATH 中的命令)

查看當(dāng)前 PATH 配置:

echo $PATH

或使用 env 查看所有環(huán)境變量及對(duì)應(yīng)值

15、whereis 命令

whereis 命令只能用于程序名的搜索,而且只搜索二進(jìn)制文件(參數(shù)-b)、man說明文件(參數(shù)-m)和源代碼文件(參數(shù)-s)。如果省略參數(shù),則返回所有信息。whereis 及 locate 都是基于系統(tǒng)內(nèi)建的數(shù)據(jù)庫進(jìn)行搜索,因此效率很高,而find則是遍歷硬盤查找文件。

常用參數(shù):

-b 定位可執(zhí)行文件。

-m 定位幫助文件。

-s 定位源代碼文件。

-u 搜索默認(rèn)路徑下除可執(zhí)行文件、源代碼文件、幫助文件以外的其它文件。

實(shí)例:

(1)查找 locate 程序相關(guān)文件

whereis locate

(2)查找 locate 的源碼文件

whereis -s locate

(3)查找 lcoate 的幫助文件

whereis -m locate

linux消息隊(duì)列的收發(fā)

26203就是你這個(gè)程序運(yùn)行時(shí)候的 PID 阿,你在發(fā)消息之前,不是把當(dāng)前進(jìn)程的PID存放到消息里的 mtype 了嗎

p-mtype = getpid();

然后接收方收到這個(gè)消息,又把 mtype 打印出來了阿

printf("Message received from %ld\n%s\n" , p-mtype , p-mdata );

這個(gè)就是打印從 PID 收到了消息,消息是 p-mdata里的內(nèi)容。

linux 有沒有直接發(fā)送消息到隊(duì)列的命令

Linux采用消息隊(duì)列的方式來實(shí)現(xiàn)消息傳遞。這種消息的發(fā)送方式是:發(fā)送方不必等待接收方檢查它所收到的消息就可以繼續(xù)工作下去,而接收方如果沒有收到消息也不需等待。這種通信機(jī)制相對(duì)簡(jiǎn)單,但是應(yīng)用程序使用起來就需要使用相對(duì)復(fù)雜的方式來應(yīng)付了。新的消息總是放在隊(duì)列的末尾,接收的時(shí)候并不總是從頭來接收,可以從中間來接收。

消息隊(duì)列是隨內(nèi)核持續(xù)的并和進(jìn)程相關(guān),只有在內(nèi)核重起或者顯示刪除一個(gè)消息隊(duì)列時(shí),該消息隊(duì)列才會(huì)真正被刪除。因此系統(tǒng)中記錄消息隊(duì)列的數(shù)據(jù)結(jié)構(gòu) (struct ipc_ids msg_ids)位于內(nèi)核中,系統(tǒng)中的所有消息隊(duì)列都可以在結(jié)構(gòu)msg_ids中中找到訪問入口。

IPC標(biāo)識(shí)符:每一個(gè)I P C目標(biāo)都有一個(gè)唯一的I P C標(biāo)識(shí)符。這里所指的I P C目標(biāo)是指一個(gè)單獨(dú)的消息隊(duì)列、一個(gè)信號(hào)量集或者一個(gè)共享的內(nèi)存段。系統(tǒng)內(nèi)核使用此標(biāo)識(shí)符在系統(tǒng)內(nèi)核中指明 I P C目標(biāo)。

Linux系統(tǒng)編程—消息隊(duì)列

消息隊(duì)列本質(zhì)上是位于內(nèi)核空間的鏈表,鏈表的每個(gè)節(jié)點(diǎn)都是一條消息。每一條消息都有自己的消息類型,消息類型用整數(shù)來表示,而且必須大于 0。每種類型的消息都被對(duì)應(yīng)的鏈表所維護(hù):

其中數(shù)字 1 表示類型為 1 的消息,數(shù)字2、3、4 類似。彩色塊表示消息數(shù)據(jù),它們被掛在對(duì)應(yīng)類型的鏈表上。

值得注意的是,剛剛說過沒有消息類型為 0 的消息,實(shí)際上,消息類型為 0 的鏈表記錄了所有消息加入隊(duì)列的順序,其中紅色箭頭表示消息加入的順序。

無論你是發(fā)送還是接收消息,消息的格式都必須按照規(guī)范來。簡(jiǎn)單的說,它一般長(zhǎng)成下面這個(gè)樣子:

所以,只要你保證首4字節(jié)(32 位 linux 下的 long)是一個(gè)整數(shù)就行了。

舉個(gè)例子:

從上面可以看出,正文部分是什么數(shù)據(jù)類型都沒關(guān)系,因?yàn)橄㈥?duì)列傳遞的是 2 進(jìn)制數(shù)據(jù),不一定非得是文本。

msgsnd 函數(shù)用于將數(shù)據(jù)發(fā)送到消息隊(duì)列。如果該函數(shù)被信號(hào)打斷,會(huì)設(shè)置 errno 為 EINTR。

參數(shù) msqid:ipc 內(nèi)核對(duì)象 id

參數(shù) msgp:消息數(shù)據(jù)地址

參數(shù) msgsz:消息正文部分的大?。ú话㈩愋停?/p>

參數(shù) msgflg:可選項(xiàng)

該值為 0:如果消息隊(duì)列空間不夠,msgsnd 會(huì)阻塞。

IPC_NOWAIT:直接返回,如果空間不夠,會(huì)設(shè)置 errno 為 EAGIN.

返回值:0 表示成功,-1 失敗并設(shè)置 errno。

msgrcv 函數(shù)從消息隊(duì)列取出消息后,并將其從消息隊(duì)列里刪除。

參數(shù) msqid:ipc 內(nèi)核對(duì)象 id

參數(shù) msgp:用來接收消息數(shù)據(jù)地址

參數(shù) msgsz:消息正文部分的大小(不包含消息類型)

參數(shù) msgtyp:指定獲取哪種類型的消息

msgtyp = 0:獲取消息隊(duì)列中的第一條消息

msgtyp 0:獲取類型為 msgtyp 的第一條消息,除非指定了 msgflg 為MSG_EXCEPT,這表示獲取除了 msgtyp 類型以外的第一條消息。

msgtyp 0:獲取類型 ≤|msgtyp|≤|msgtyp| 的第一條消息。

參數(shù) msgflg:可選項(xiàng)。

如果為 0 表示沒有消息就阻塞。

IPC_NOWAIT:如果指定類型的消息不存在就立即返回,同時(shí)設(shè)置 errno 為 ENOMSG

MSG_EXCEPT:僅用于 msgtyp 0 的情況。表示獲取類型不為 msgtyp 的消息

MSG_NOERROR:如果消息數(shù)據(jù)正文內(nèi)容大于 msgsz,就將消息數(shù)據(jù)截?cái)酁?msgsz

程序 msg_send 和 msg_recv 分別用于向消息隊(duì)列發(fā)送數(shù)據(jù)和接收數(shù)據(jù)。

msg_send 程序定義了一個(gè)結(jié)構(gòu)體 Msg,消息正文部分是結(jié)構(gòu)體 Person。該程序向消息隊(duì)列發(fā)送了 10 條消息。

msg_send.c

程序 msg_send 第一次運(yùn)行完后,內(nèi)核中的消息隊(duì)列大概像下面這樣:

msg_recv 程序接收一個(gè)參數(shù),表示接收哪種類型的消息。比如./msg_recv 4 表示接收類型為 4 的消息,并打印在屏幕。

先運(yùn)行 msg_send,再運(yùn)行 msg_recv。

接收所有消息

接收類型為 4 的消息

獲取和設(shè)置消息隊(duì)列的屬性

msqid:消息隊(duì)列標(biāo)識(shí)符

cmd:控制指令

IPC_STAT:獲得msgid的消息隊(duì)列頭數(shù)據(jù)到buf中

IPC_SET:設(shè)置消息隊(duì)列的屬性,要設(shè)置的屬性需先存儲(chǔ)在buf中,可設(shè)置的屬性包括:msg_perm.uid、msg_perm.gid、msg_perm.mode以及msg_qbytes

buf:消息隊(duì)列管理結(jié)構(gòu)體。

返回值:

成功:0

出錯(cuò):-1,錯(cuò)誤原因存于error中

EACCESS:參數(shù)cmd為IPC_STAT,確無權(quán)限讀取該消息隊(duì)列

EFAULT:參數(shù)buf指向無效的內(nèi)存地址

EIDRM:標(biāo)識(shí)符為msqid的消息隊(duì)列已被刪除

EINVAL:無效的參數(shù)cmd或msqid

EPERM:參數(shù)cmd為IPC_SET或IPC_RMID,卻無足夠的權(quán)限執(zhí)行

如何在linux下看消息隊(duì)列是否存在

#include

#include

#include

#include types.h

#include msg.h

#include

#include ipc.h

void msg_show_attr(int msg_id, struct msqid_ds msg_info)

{

int ret = -1;

sleep(1);

ret = msgctl(msg_id, IPC_STAT, msg_info);

if( -1 == ret)

{

printf(獲消息信息失敗\n);

return ;

}

printf(\n);

printf(現(xiàn)隊(duì)列字節(jié)數(shù):%d\n,msg_info.msg_cbytes);

printf(隊(duì)列消息數(shù):%d\n,msg_info.msg_qnum);

printf(隊(duì)列字節(jié)數(shù):%d\n,msg_info.msg_qbytes);

printf(發(fā)送消息進(jìn)程pid:%d\n,msg_info.msg_lspid);

printf(接收消息進(jìn)程pid:%d\n,msg_info.msg_lrpid);

printf(發(fā)送消息間:%s,ctime((msg_info.msg_stime)));

printf(接收消息間:%s,ctime((msg_info.msg_rtime)));

printf(變化間:%s,ctime((msg_info.msg_ctime)));

printf(消息UID:%d\n,msg_info.msg_perm.uid);

printf(消息GID:%d\n,msg_info.msg_perm.gid);

}

int main(void)

{

int ret = -1;

int msg_flags, msg_id;

key_t key;

struct msgmbuf{

int mtype;

char mtext[10];

};

struct msqid_ds msg_info;

struct msgmbuf msg_mbuf;

int msg_sflags,msg_rflags;

char *msgpath = /ipc/msg/;

key = ftok(msgpath,’a');

if(key != -1)

{

printf(功建立KEY\n);

}

else

{

printf(建立KEY失敗\n);

}

msg_flags = IPC_CREAT;

msg_id = msgget(key, msg_flags|0666);

if( -1 == msg_id)

{

printf(消息建立失敗\n);

return 0;

}

msg_show_attr(msg_id, msg_info);

msg_sflags = IPC_NOWAIT;

msg_mbuf.mtype = 10;

memcpy(msg_mbuf.mtext,測(cè)試消息,sizeof(測(cè)試消息));

ret = msgsnd(msg_id, msg_mbuf, sizeof(測(cè)試消息), msg_sflags);

if( -1 == ret)

{

printf(發(fā)送消息失敗\n);

}

msg_show_attr(msg_id, msg_info);

msg_rflags = IPC_NOWAIT|MSG_NOERROR;

ret = msgrcv(msg_id, msg_mbuf, 10,10,msg_rfla

共享內(nèi)存示例代碼:

#include

#include sem.h

#include ipc.h

#include

typedef int sem_t;

union semun {

int val;

struct semid_ds *buf;

unsigned short *array;

} arg;

sem_t CreateSem(key_t key, int value)

{

union semun sem;

sem_t semid;

sem.val = value;

semid = semget(key,value,IPC_CREAT|0666);

if (-1 == semid)

{

printf(create semaphore error\n);

return -1;

}

semctl(semid,0,SETVAL,sem);

return semid;

}

/*

struct sembuf{

ushort sem_num;

short sem_op;

short sem_flg;

};

*/

void SetvalueSem(sem_t semid, int value)

{

union semun sem;

sem.val = value;

semctl(semid,0,SETVAL,sem);

return ;

}

int GetvalueSem(sem_t semid)

{

union semun sem;

return semctl(semid,0,GETVAL,sem);

return sem.val;

}

void DestroySem(sem_t semid)

{

union semun sem;

sem.val = 0;

semctl(semid,0,IPC_RMID,sem);

}

int Sem_P(sem_t semid)

{

struct sembuf sops={0,+1,IPC_NOWAIT};

return (semop(semid,sops,1));

}

int Sem_V(sem_t semid)

{

struct sembuf sops={0,-1,IPC_NOWAIT};

return (semop(semid,sops,1));

}

static char msg[]=共享內(nèi)存\n;

int main(void)

{

key_t key;

int semid,shmid;

char i,*shms,*shmc;

struct semid_ds buf;

int value = 0;

char buffer[80];

pid_t p;

key = ftok(/ipc/sem/,’a');

shmid = shmget(key,1024,IPC_CREAT|0604);

semid = CreateSem(key,1);

p = fork();

if(p 0)

{

/* 父進(jìn)程 */

/* 建立共享內(nèi)存 */

shms = (char *)shmat(shmid,0,0);

memcpy(shms, msg, strlen(msg)+1);

sleep(10);

Sem_P(semid);

shmdt(shms);

DestroySem(semid);

}

else if(p == 0)

{

shmc = (char *)shmat(shmid,0,0);

Sem_V(semid);

printf(共享內(nèi)存值:%s\n,shmc);

shmdt(sg_


分享題目:linux看消息隊(duì)列命令,linux查看消息隊(duì)列中消息
文章轉(zhuǎn)載:http://weahome.cn/article/dssjsch.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部