當(dāng)前位置:首頁 > 芯聞號(hào) > 充電吧
[導(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)程測試


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)程的??臻g,并使用父進(jìn)程的內(nèi)存和數(shù)據(jù)。這意味著子進(jìn)程可能破壞父進(jìn)程的數(shù)據(jù)結(jié)構(gòu)或棧,造成失敗。
為了避免這些問題,需要確保一旦調(diào)用vfork(),子進(jìn)程就不從當(dāng)前的??蚣苤蟹祷兀⑶胰绻舆M(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


以下為測試程序:
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)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉