日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > 充電吧
[導(dǎo)讀]Linux進(jìn)程間通信--進(jìn)程,信號(hào),管道,消息隊(duì)列,信號(hào)量,共享內(nèi)存參考:《linux編程從入門到精通》,《Linux C程序設(shè)計(jì)大全》,《unix環(huán)境高級(jí)編程》參考:C和指針學(xué)習(xí)?說明:本文非常的長

Linux進(jìn)程間通信--進(jìn)程,信號(hào),管道,消息隊(duì)列,信號(hào)量,共享內(nèi)存

參考:《linux編程從入門到精通》,《Linux C程序設(shè)計(jì)大全》,《unix環(huán)境高級(jí)編程》

參考:C和指針學(xué)習(xí)?

說明:本文非常的長,也是為了便于查找和比較,所以放在一起了



Linux 傳統(tǒng)的進(jìn)程間通信有很多,如各類管道、消息隊(duì)列、內(nèi)存共享、信號(hào)量等等。但它們都無法介于內(nèi)核態(tài)與用戶態(tài)使用,原因如表


通信方法無法介于內(nèi)核態(tài)與用戶態(tài)的原因管道(不包括命名管道)局限于父子進(jìn)程間的通信。消息隊(duì)列在硬、軟中斷中無法無阻塞地接收數(shù)據(jù)。信號(hào)量無法介于內(nèi)核態(tài)和用戶態(tài)使用。內(nèi)存共享需要信號(hào)量輔助,而信號(hào)量又無法使用。套接字在硬、軟中斷中無法無阻塞地接收數(shù)據(jù)。


一.進(jìn)程

1.進(jìn)程表

ps顯示正在運(yùn)行的進(jìn)程

# ps -ef


TIME 進(jìn)程目前占用的cpu時(shí)間,CMD顯示啟動(dòng)進(jìn)程所使用的命令



#ps ax


STAT表明進(jìn)程的狀態(tài)

S 睡眠,s進(jìn)程是會(huì)話期首進(jìn)程;R 運(yùn)行;D 等待;T 停止;Z 僵尸;N 低優(yōu)先級(jí)任務(wù),nice;W 分頁;

+進(jìn)程屬于前臺(tái)進(jìn)程組;l 進(jìn)程是多線程;<高優(yōu)先級(jí)任務(wù)


#ps -l ?或#ps -al


表現(xiàn)良好的程序?yàn)閚ice程序,系統(tǒng)根據(jù)進(jìn)程的nice值決定他的優(yōu)先級(jí)

-f是長格式



2.父子進(jìn)程id

pid當(dāng)前進(jìn)程的;

uid當(dāng)前進(jìn)程的實(shí)際用戶

eid當(dāng)前進(jìn)程的有效用戶

#include

運(yùn)行結(jié)果:



3.設(shè)置進(jìn)程組id以及進(jìn)程sleep

setpgid使當(dāng)前進(jìn)程為新進(jìn)程組的組長

#include

說明:setpgid(0,0)等價(jià)于setpgrp(0,0)

setpgid(0,0)第1個(gè)參數(shù)用于指定要修改的進(jìn)程id。如果為0,則指當(dāng)前進(jìn)程。第2個(gè)參數(shù)用于指定新的進(jìn)程組id。如果為0,則指當(dāng)前進(jìn)程。

先運(yùn)行程序

#./example13_2

再查看進(jìn)程

#ps alef


#ps -ao pid,pgrp,cmd|grep 13_2 ?

或者

#ps -ao pid,pgrp,cmd



4.子進(jìn)程

fork為0說明是父進(jìn)程

#include

輸出

fork...
AA


注意:?

警告: 隱式聲明與內(nèi)建函數(shù) ‘exit’ 不兼容?
警告: 隱式聲明與內(nèi)建函數(shù) ‘sprintf’ 不兼容???
警告: 隱式聲明與內(nèi)建函數(shù) ‘printf’ 不兼容
加入這兩個(gè)頭文件就可以了!
#include


#ps -ao pid,pgrp,cmd

3165就是子進(jìn)程


#ps alef


5.進(jìn)程會(huì)話

setsid的調(diào)用進(jìn)程應(yīng)該不是某個(gè)進(jìn)程組的組長進(jìn)程;

setsid調(diào)用成功后生成新會(huì)話,新會(huì)話id是調(diào)用進(jìn)程的進(jìn)程id;

新會(huì)話只包含一個(gè)進(jìn)程組一個(gè)進(jìn)程即調(diào)用進(jìn)程,沒有控制終端。

setid主要是實(shí)現(xiàn)進(jìn)程的后臺(tái)運(yùn)行

#include


修改后的程序

#include

父進(jìn)程必須調(diào)用wait等待子進(jìn)程推出,如果沒有子進(jìn)程退出exit,則wait進(jìn)入阻塞!

6.進(jìn)程的控制終端

#tty


在secureCRT中觀看其他的會(huì)輸出

/dev/pts/1等依次類推


#ps -ax

查看進(jìn)程的控制終端


有列tty的就是控制終端,有值表明進(jìn)程有控制終端,無則表明是后臺(tái)進(jìn)程。

延伸:php的POSIX 函數(shù)以及進(jìn)程測(cè)試


7.進(jìn)程的狀態(tài)

可運(yùn)行;

等待;

暫停;

僵尸;

進(jìn)程在終止前向父進(jìn)程發(fā)送SIGCLD信號(hào),父進(jìn)程調(diào)用wait等待子進(jìn)程的退出!

如果,父進(jìn)程沒有調(diào)用wait而子進(jìn)程已經(jīng)退出,那么父進(jìn)程成為僵尸進(jìn)程;

如果,父進(jìn)程沒有等子進(jìn)程退出自己已經(jīng)先退出,那么子進(jìn)程成為孤兒進(jìn)程;

通過top命令看到



8.進(jìn)程的優(yōu)先級(jí)

優(yōu)先級(jí)數(shù)值越低,則優(yōu)先級(jí)越高!

優(yōu)先級(jí)由優(yōu)先級(jí)別(PR)+進(jìn)程的謙讓值(NI) ?聯(lián)合確定。

PR值是由父進(jìn)程繼承而來,是不可修改的。

Linux提供nice系統(tǒng)調(diào)用修改自身的NI值;setpriority系統(tǒng)調(diào)用可以修改其他進(jìn)程以及進(jìn)程組的NI值。

#include

輸出:

priority is 3


9.用fork創(chuàng)建進(jìn)程

調(diào)用fork一次返回2次,分別在父進(jìn)程和子進(jìn)程中返回,父進(jìn)程中其返回值是子進(jìn)程的進(jìn)程標(biāo)識(shí)符,子進(jìn)程中其返回值是0。

#include

(注意保存為UTF-8格式,因?yàn)橛兄形模?br />

輸出:



10.vfork和fork之間的區(qū)別

vfork用于創(chuàng)建一個(gè)新進(jìn)程,而該新進(jìn)程的目的是exec一個(gè)新進(jìn)程,vfork和fork一樣都創(chuàng)建一個(gè)子進(jìn)程,但是它并不將父進(jìn)程的地址空間完全復(fù)制到子進(jìn)程中,不會(huì)復(fù)制頁表。因?yàn)樽舆M(jìn)程會(huì)立即調(diào)用exec,于是也就不會(huì)存放該地址空間。不過在子進(jìn)程中調(diào)用exec或exit之前,他在父進(jìn)程的空間中運(yùn)行。
為什么會(huì)有vfork,因?yàn)橐郧暗膄ork當(dāng)它創(chuàng)建一個(gè)子進(jìn)程時(shí),將會(huì)創(chuàng)建一個(gè)新的地址空間,并且拷貝父進(jìn)程的資源,而往往在子進(jìn)程中會(huì)執(zhí)行exec調(diào)用,這樣,前面的拷貝工作就是白費(fèi)力氣了,這種情況下,聰明的人就想出了vfork,它產(chǎn)生的子進(jìn)程剛開始暫時(shí)與父進(jìn)程共享地址空間(其實(shí)就是線程的概念了),因?yàn)檫@時(shí)候子進(jìn)程在父進(jìn)程的地址空間中運(yùn)行,所以子進(jìn)程不能進(jìn)行寫操作,并且在兒子“霸占”著老子的房子時(shí)候,要委屈老子一下了,讓他在外面歇著(阻塞),一旦兒子執(zhí)行了exec或者exit后,相當(dāng)于兒子買了自己的房子了,這時(shí)候就相當(dāng)于分家了。
vfork和fork之間的另一個(gè)區(qū)別是: vfork保證子進(jìn)程先運(yùn)行,在她調(diào)用exec或exit之后父進(jìn)程才可能被調(diào)度運(yùn)行。如果在調(diào)用這兩個(gè)函數(shù)之前子進(jìn)程依賴于父進(jìn)程的進(jìn)一步動(dòng)作,則會(huì)導(dǎo)致死鎖。
由此可見,這個(gè)系統(tǒng)調(diào)用是用來啟動(dòng)一個(gè)新的應(yīng)用程序。其次,子進(jìn)程在vfork()返回后直接運(yùn)行在父進(jìn)程的棧空間,并使用父進(jìn)程的內(nèi)存和數(shù)據(jù)。這意味著子進(jìn)程可能破壞父進(jìn)程的數(shù)據(jù)結(jié)構(gòu)或棧,造成失敗。
為了避免這些問題,需要確保一旦調(diào)用vfork(),子進(jìn)程就不從當(dāng)前的??蚣苤蟹祷?,并且如果子進(jìn)程改變了父進(jìn)程的數(shù)據(jù)結(jié)構(gòu)就不能調(diào)用exit函數(shù)。子進(jìn)程還必須避免改變?nèi)謹(jǐn)?shù)據(jù)結(jié)構(gòu)或全局變量中的任何信息,因?yàn)檫@些改變都有可能使父進(jìn)程不能繼續(xù)。
通常,如果應(yīng)用程序不是在fork()之后立即調(diào)用exec(),就有必要在fork()被替換成vfork()之前做仔細(xì)的檢查。
用fork函數(shù)創(chuàng)建子進(jìn)程后,子進(jìn)程往往要調(diào)用一種exec函數(shù)以執(zhí)行另一個(gè)程序,當(dāng)進(jìn)程調(diào)用一種exec函數(shù)時(shí),該進(jìn)程完全由新程序代換,而新程序則從其main函數(shù)開始執(zhí)行,因?yàn)檎{(diào)用exec并不創(chuàng)建新進(jìn)程,所以前后的進(jìn)程id 并未改變,exec只是用另一個(gè)新程序替換了當(dāng)前進(jìn)程的正文,數(shù)據(jù),堆和棧段。


11.exec

清除父進(jìn)程的可執(zhí)行代碼影像,用新代碼覆蓋父進(jìn)程。

參考:Linux exec與重定向

#include


12.system創(chuàng)建進(jìn)程

system系統(tǒng)調(diào)用是為了方便調(diào)用外部程序,執(zhí)行完畢后返回調(diào)用進(jìn)程。

#include

輸出:



13.退出進(jìn)程

調(diào)用exit退出進(jìn)程

調(diào)用wait等待進(jìn)程退出

#include

輸出:



二.信號(hào)

信號(hào)又稱軟終端,通知程序發(fā)生異步事件,程序執(zhí)行中隨時(shí)被各種信號(hào)中斷,進(jìn)程可以忽略該信號(hào),也可以中斷當(dāng)前程序轉(zhuǎn)而去處理信號(hào),引起信號(hào)原因:

1).程序中執(zhí)行錯(cuò)誤碼;

2).其他進(jìn)程發(fā)送來的;

3).用戶通過控制終端發(fā)送來;

4).子進(jìn)程結(jié)束時(shí)向父進(jìn)程發(fā)送SIGCLD;

5).定時(shí)器生產(chǎn)的SIGALRM;


1.信號(hào)分類

#kill -l

獲取信號(hào)列表,信號(hào)值) ?信號(hào)名


1-31是不可靠信號(hào)(可能丟失);32-64是可靠信號(hào)(操作系統(tǒng)保證不丟失)

信號(hào)列表參考:http://blog.csdn.net/21aspnet/article/details/7494565

信號(hào)安裝:定義進(jìn)程收到信號(hào)后的處理方法

signal系統(tǒng)調(diào)用安裝信號(hào)

#include

輸出:

按Ctrl+C

receive signal 2


sigaction系統(tǒng)調(diào)用(更多的控制,完全可以替代signal)

#include


輸出:

按Ctrl+C

receive signal 2,addtional data is 12364176


2.信號(hào)處理方式3種:

1.忽略信號(hào)-大多可以忽略,只有SIGKILL和SIGSTOP除外;

2.捕捉信號(hào)-先安裝

3.默認(rèn)操作


3.信號(hào)阻塞

阻塞是指系統(tǒng)內(nèi)核暫停向進(jìn)程發(fā)送指定信號(hào),由內(nèi)核對(duì)進(jìn)程接收到的信號(hào)緩存,直到解除阻塞為止。

信號(hào)3種進(jìn)入阻塞的情況:

1.信號(hào)處理函數(shù)執(zhí)行過程中,該信號(hào)將阻塞;

2.通過sigaction信號(hào)安裝,如果設(shè)置了sa_mask阻塞信號(hào)集;

3.通過系統(tǒng)調(diào)用sigprocmask

int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);


參數(shù):
how:用于指定信號(hào)修改的方式,可能選擇有三種

SIG_BLOCK //加入信號(hào)到進(jìn)程屏蔽。
SIG_UNBLOCK //從進(jìn)程屏蔽里將信號(hào)刪除。
SIG_SETMASK //將set的值設(shè)定為新的進(jìn)程屏蔽。

set:為指向信號(hào)集的指針,在此專指新設(shè)的信號(hào)集,如果僅想讀取現(xiàn)在的屏蔽值,可將其置為NULL。
oldset:也是指向信號(hào)集的指針,在此存放原來的信號(hào)集。


#include

輸出:如果不輸入Ctrl+C則10秒后程序結(jié)束;如果期間有Ctrl+C則會(huì)10秒結(jié)束,之后輸出Creceive signal 2


注意:子進(jìn)程會(huì)繼承父進(jìn)程的信號(hào)掩碼


4.信號(hào)集操作

對(duì)信號(hào)集中所有信號(hào)處理

數(shù)據(jù)類型 sigset_t

清空信號(hào)集sigemptyset

信號(hào)集填充全部信號(hào)sigfillset

信號(hào)集增加信號(hào)sigaddset

信號(hào)集中刪除信號(hào)sigdelset

判斷信號(hào)集是否包含某信號(hào)的sigismember


5.未決信號(hào)

信號(hào)產(chǎn)生后到信號(hào)被接收進(jìn)程處理前的過渡狀態(tài),未決狀態(tài)時(shí)間很短。

sigprocmask阻塞某種信號(hào),則向進(jìn)程發(fā)送這種信號(hào)處于未決狀態(tài)。

sigpending獲取當(dāng)前進(jìn)程中處于未決狀態(tài)的信號(hào)

#include


6.等待信號(hào)

阻塞式系統(tǒng)如果沒有符合條件的數(shù)據(jù)將休眠,直到數(shù)據(jù)到來,例如socket上讀取數(shù)據(jù)。有2種狀態(tài)可以中斷該操作

1.網(wǎng)絡(luò)上有數(shù)據(jù),讀操作獲取數(shù)據(jù)后返回

2.當(dāng)前進(jìn)程接收信號(hào),讀操作被中斷返回失敗,錯(cuò)誤碼errno為EINTR

pause系統(tǒng)調(diào)用可以讓程序暫停執(zhí)行進(jìn)入休眠,等待信號(hào)到來。

#include


7.信號(hào)發(fā)送

兩種方式

kill 不可附加數(shù)據(jù)

sigqueue?可附加數(shù)據(jù)

#include

輸出:receive addtional data is 123


8.sigalarm信號(hào)

阻塞式系統(tǒng)調(diào)用,為避免無限期等待,可以設(shè)置定時(shí)器信號(hào),alarm調(diào)用

#include

輸出:

SIGALRM received.
Pause time out.


9.sigcld信號(hào)

父進(jìn)程捕獲子進(jìn)程的退出信號(hào)

子進(jìn)程發(fā)送SIGCLD信號(hào)進(jìn)入僵尸狀態(tài);父進(jìn)程接收到該信號(hào)處理,子進(jìn)程結(jié)束

#include

輸出:



三.管道

單向,一段輸入,另一端輸出,先進(jìn)先出FIFO。管道也是文件。管道大小4096字節(jié)。

特點(diǎn):管道滿時(shí),寫阻塞;空時(shí),讀阻塞。

分類:普通管道(僅父子進(jìn)程間通信)位于內(nèi)存,命名管道位于文件系統(tǒng),沒有親緣關(guān)系管道只要知道管道名也可以通訊。

1.pipe建立管道

#include

執(zhí)行

#./a.out ? www

輸出

#www


2.dup

#include

輸出:129

?

Linux execlp函數(shù)

說明:相當(dāng)于執(zhí)行# ls -l |wc -l 統(tǒng)計(jì)當(dāng)前目錄下文件數(shù)量;ls -l 列出當(dāng)前文件詳細(xì)信息;wc -l

wc參考http://blog.csdn.net/21aspnet/article/details/7515442

linux命令集錦http://blog.csdn.net/21aspnet/article/details/1534099

linux常用命令http://linux.chinaitlab.com/special/linuxcom/

3.popen() 函數(shù)

用于創(chuàng)建一個(gè)管道,其內(nèi)部實(shí)現(xiàn)為調(diào)用 fork 產(chǎn)生一個(gè)子進(jìn)程,執(zhí)行一個(gè) shell 以運(yùn)行命令來開啟一個(gè)進(jìn)程,這個(gè)進(jìn)程必須由 pclose() 函數(shù)關(guān)閉。
#include



4.命名管道

mknod

mknod 管道名稱 p

#include


mkfifo

mkfifo -m 權(quán)限?管道名稱

#include

mknod和mkfifo的區(qū)別

mknod系統(tǒng)調(diào)用會(huì)產(chǎn)生由參數(shù)path鎖指定的文件,生成文件類型和訪問權(quán)限由參數(shù)mode決定。

在很多unix的版本中有一個(gè)C庫函數(shù)mkfifo,與mknod不同的是多數(shù)情況下mkfifo不要求用戶有超級(jí)用戶的權(quán)限


利用命令創(chuàng)建命名管道p1.

#mkfifo -m 0644 p1

#mknod p2 p

#ll


#include


5.管道讀寫

通過open打開,默認(rèn)是阻塞方式打開,如果open指定O_NONBLOCK則以非阻塞打開。

O_NONBLOCK和O_NDELAY所產(chǎn)生的結(jié)果都是使I/O變成非擱置模式(non-blocking),在讀取不到數(shù)據(jù)或是寫入緩沖區(qū)已滿會(huì)馬上return,而不會(huì)擱置程序動(dòng)作,直到有數(shù)據(jù)或?qū)懭胪瓿伞?br />

它們的差別在于設(shè)立O_NDELAY會(huì)使I/O函式馬上回傳0,但是又衍生出一個(gè)問題,因?yàn)樽x取到檔案結(jié)尾時(shí)所回傳的也是0,這樣無法得知是哪中情況;因此,O_NONBLOCK就產(chǎn)生出來,它在讀取不到數(shù)據(jù)時(shí)會(huì)回傳-1,并且設(shè)置errno為EAGAIN。


不過需要注意的是,在GNU C中O_NDELAY只是為了與BSD的程序兼容,實(shí)際上是使用O_NONBLOCK作為宏定義,而且O_NONBLOCK除了在ioctl中使用,還可以在open時(shí)設(shè)定。

#include

? // if((fd = open("p1",O_WRONLY,0)) < 0)//只寫打開管道
? ? {
? ? ? ? perror("open");
? ? ? ? exit(-1);
? ? }
? ? printf("open fifo p1 for write success!n");
? ? close(fd);
}


四.IPC對(duì)象

查看ipc對(duì)象信息

#ipcs


查看全部ipc對(duì)象信息

#ipcs -a

查看消息隊(duì)列信息

#ipcs -q

查看共享內(nèi)存信息

#ipcs -m

查看信號(hào)量信息

#ipcs -s

刪除IPC對(duì)象的ipcrm

ipcrm -[smq] ID 或者ipcrm -[SMQ] Key

-q ?-Q刪除消息隊(duì)列信息 ?例如ipcrm -q 98307

-m -M刪除共享內(nèi)存信息

-s -S刪除信號(hào)量信息


ftok函數(shù)

產(chǎn)生一個(gè)唯一的關(guān)鍵字值

ftok原型如下:
key_t ftok( char * fname, int id )


fname就是你指定的文件名(該文件必須是存在而且可以訪問的),id是子序號(hào),雖然為int,但是只有8個(gè)比特被使用(0-255)。


當(dāng)成功執(zhí)行的時(shí)候,一個(gè)key_t值將會(huì)被返回,否則 -1 被返回。


? ?在一般的UNIX實(shí)現(xiàn)中,是將文件的索引節(jié)點(diǎn)號(hào)取出,前面加上子序號(hào)得到key_t的返回值。如指定文件的索引節(jié)點(diǎn)號(hào)為65538,換算成16進(jìn)制為 0x010002,而你指定的ID值為38,換算成16進(jìn)制為0x26,則最后的key_t返回值為0x26010002。
查詢文件索引節(jié)點(diǎn)號(hào)的方法是: ls -i


以下為測(cè)試程序:
ftok.c
#include

#./a.out



五.消息隊(duì)列

消息隊(duì)列是先進(jìn)先出FIFO原則

1.消息結(jié)構(gòu)模板

strut msgbuf
{
long int ?mtype;//消息類型
char mtext[1];//消息內(nèi)容
}


2.msgget創(chuàng)建消息

#include


#include



3.msgsnd消息發(fā)送

int msgsnd(int msqid, const void *ptr, size_t length, int flag);
此函數(shù)發(fā)送消息到指定的消息對(duì)列

#include


隊(duì)列中已經(jīng)有一條消息,長度6字節(jié)



4.msgrcv消息發(fā)送

#include

輸出:

msgrcv return length=[6] text=[123456]


5.msgctl控制消息

int msgctl(int msqid, int cmd, struct msqid_ds *buf);
消息隊(duì)列控制函數(shù)
其中msqid為消息隊(duì)列描述符
cmd有以下三種:
IPC_RMID:刪除msgid指定的消息隊(duì)列,當(dāng)前在該隊(duì)列上的任何消息都被丟棄,對(duì)于該命令,buf參數(shù)可忽略
IPC_SET:設(shè)置消息隊(duì)列msgid_ds結(jié)構(gòu)體的四個(gè)成員:msg_perm.uid,msg_perm_gid,msg_perm.mode和msg_qbytes。它們的值來自由buf指向的結(jié)構(gòu)體中的相應(yīng)成員。
IPC_STAT:給調(diào)用者通過buf返回指定消息隊(duì)列當(dāng)前對(duì)應(yīng)msgid_ds結(jié)構(gòu)體
函數(shù)執(zhí)行成功返回0,失敗返回-1


#include

說明: (~0222)取反后做與實(shí)際上就是去除其他用戶的寫權(quán)限,在C語言中,八進(jìn)制常用用前綴表示


六.共享內(nèi)存

共享內(nèi)存是分配一塊能被其他進(jìn)程訪問的內(nèi)存,實(shí)現(xiàn)是通過將內(nèi)存去映射到共享它的進(jìn)程的地址空間,使這些進(jìn)程間的數(shù)據(jù)傳送不再涉及內(nèi)核,即,進(jìn)程間通信不需要通過進(jìn)入內(nèi)核的系統(tǒng)調(diào)用來實(shí)現(xiàn);

共享內(nèi)存與其他的進(jìn)程間通信最大的優(yōu)點(diǎn)是:數(shù)據(jù)的復(fù)制只有兩次,一次是從輸入文件到共享內(nèi)存區(qū),一次從共享內(nèi)存區(qū)到輸出文件

而其他的則是需要復(fù)制4次:服務(wù)器將輸入文件讀入自己的進(jìn)程空間,再從自己的進(jìn)程空間寫入管道/消息隊(duì)列等;客戶進(jìn)程從管道/消息隊(duì)列中讀出數(shù)據(jù)到自己的進(jìn)程空間,最后輸出到客戶指定的文件中;

要使用共享內(nèi)存,應(yīng)該有如下步驟:
1.開辟一塊共享內(nèi)存 ? ? shmget()
2.允許本進(jìn)程使用共某塊共享內(nèi)存 ?shmat()
3.寫入/讀出
4.禁止本進(jìn)程使用這塊共享內(nèi)存 ? shmdt()
5.刪除這塊共享內(nèi)存 ? ? shmctl()或者命令行下ipcrm


1.shmget創(chuàng)建共享內(nèi)存

#include

int ? ?shmget( key_t shmkey , int shmsiz , int flag );

shmget()是用來開辟/指向一塊共享內(nèi)存的函數(shù)。參數(shù)定義如下:
key_t shmkey 是這

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉