日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

UNIX進(jìn)程之間的通信( 二 )


int execv(path,argv)
char *path,*argv[];
int execle(path,arg0,...,argn,(char*)0,envp)
char *path,*arg0,...,*argn,*envp[];
int execve(path,argv,envp)
char *path,*argv[],*envp[];
int execvp(file,argv)
char *file,*argv[];[/code:1:d22bc4f5e9]

說明:這是一個(gè)系統(tǒng)調(diào)用族, 用于將一個(gè)新的程序調(diào)入本進(jìn)程所占的內(nèi)存, 并覆蓋之, 產(chǎn)生新的內(nèi)存進(jìn)程映象. 新的程序可以是可執(zhí)行文件或SHELL批命令.當(dāng)C程序被執(zhí)行時(shí),是如下調(diào)用的:
main(int argc,char *argv[],char *envp[]);
argc是參數(shù)個(gè)數(shù),是各個(gè)參數(shù)字符串指針數(shù)組,envp是新進(jìn)程的環(huán)境變量字符串的指針數(shù)組.argc至少為1, argv[0]為程序文件名,所以,在上面的exec系統(tǒng)調(diào)用族中,path為新進(jìn)程文件的路徑名,file為新進(jìn)程文件名,若file不是全路徑名,系統(tǒng)調(diào)用會(huì)按PATH環(huán)境變量自動(dòng)找對應(yīng)的可執(zhí)行文件運(yùn)行.若新進(jìn)程文件不是一個(gè)可執(zhí)行的目標(biāo)文件(如批處理文件),則execlp()和execvp()會(huì)將該文件內(nèi)容作為一個(gè)命令解釋器的標(biāo)準(zhǔn)輸入形成system().arg0,...等指針指向""結(jié)束的字符串,組成新進(jìn)程的有效參數(shù),且該參數(shù)列表以一個(gè)空指針結(jié)束.反過來,arg0至少必須存在并指向新進(jìn)程文件名或路徑名.同樣,argv是字符串指針數(shù)組,argv[0]指向新進(jìn)程文件名或路徑名,并以一空指針結(jié)束.envp是一個(gè)字符串指針數(shù)組,以空指針結(jié)束,這些字符串組成新進(jìn)程的環(huán)境.在調(diào)用這些系統(tǒng)調(diào)用前打開的文件指針對新進(jìn)程來說也是打開的,除非它已定義了close-on-exec標(biāo)志.打開的文件指針在新進(jìn)程中保持不變,所有相關(guān)的文件鎖也被保留.調(diào)用進(jìn)程設(shè)置并正被捕俘的信號(hào)在新進(jìn)程中被恢復(fù)為缺省設(shè)置,其它的則保持不變.新進(jìn)程啟動(dòng)時(shí)按文件的SUID和SGID設(shè)置定義文件的UID和GID為有效UID和GID.新進(jìn)程還繼承了如下屬性:
. 附加GID.
. 進(jìn)程號(hào).
. 父進(jìn)程號(hào).
. 進(jìn)程組號(hào).
. 會(huì)話號(hào).
. 控制終端.
. alarm時(shí)鐘信號(hào)剩下的時(shí)間.
. 當(dāng)前工作目錄.
. 根目錄.
. 文件創(chuàng)建掩碼.
. 資源限制.
. 用戶時(shí)間,系統(tǒng)時(shí)間,子進(jìn)程用戶時(shí)間,子進(jìn)程系統(tǒng)時(shí)間.
. 記錄鎖.
. 進(jìn)程信號(hào)掩碼.
. 信號(hào)屏蔽.
. 優(yōu)先級(jí).
. 預(yù)定值.
調(diào)用成功后,系統(tǒng)調(diào)用修改新進(jìn)程文件的最新訪問時(shí)間.返回值:該系統(tǒng)調(diào)用一般不會(huì)有成功返回值, 因?yàn)樵瓉淼倪M(jìn)程已蕩然無存.
例子:printf("now this process will be ps commandn");
execl("/bin/ps","ps","-ef",NULL);

二、進(jìn)程通訊編程

[code:1:d22bc4f5e9]1,Message queue隊(duì)列編程例子

/*****************************************************************************
Excerpt from "Linux Programmer"s Guide - Chapter 6"
(C)opyright 1994-1995, Scott Burkett
*****************************************************************************
MODULE: msgtool.c
*****************************************************************************
A command line tool for tinkering with SysV style Message Queues
*****************************************************************************/

#include
#include
#include
#include
#include
#include

#define MAX_SEND_SIZE 80

struct mymsgbuf {
long mtype;
char mtext[MAX_SEND_SIZE];
};

void send_message(int qid, struct mymsgbuf *qbuf, long type, char *text);
void read_message(int qid, struct mymsgbuf *qbuf, long type);
void remove_queue(int qid);
void change_queue_mode(int qid, char *mode);
void usage(void);


int main(int argc, char *argv[])
{
key_t key;
int msgqueue_id;
struct mymsgbuf qbuf;

if(argc == 1)
usage();

/* Create unique key via call to ftok() */
/* key = ftok(".", "w"); */
key = 123456;
printf("key=%dn",key);
key=IPC_PRIVATE;
/* Open the queue - create if necessary */

if((tolower(argv[1][0]))!="s")
{
if((msgqueue_id = msgget(key, IPC_CREAT|0666)) == -1) {

推薦閱讀