久久久精品一区ed2k-女人被男人叉到高潮的视频-中文字幕乱码一区久久麻豆樱花-俄罗斯熟妇真实视频

進(jìn)程的通信-創(chuàng)新互聯(lián)

通信領(lǐng)域的幾個(gè)概念:

專注于為中小企業(yè)提供網(wǎng)站制作、網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)靈石免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了千余家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

? 單工通信:數(shù)據(jù)的傳送方向?yàn)閱蜗虻?,發(fā)送端和接收端都是固定的,后續(xù)不可更改【廣播:廣播是發(fā)送端,聽的人是接收端】

? 半雙工通信:數(shù)據(jù)的傳送方向?yàn)殡p向,但不同時(shí),發(fā)送端和接收端不固定,但不能同時(shí)兩端都為發(fā)送端或都為接收端【對(duì)講機(jī)】

? 全雙工通信:數(shù)據(jù)的傳送方向?yàn)殡p向且同時(shí)(電腦)

進(jìn)程間通信:兩個(gè)進(jìn)程數(shù)據(jù)交換

1.無名管道:實(shí)現(xiàn)交換的第三方的介質(zhì),存在在linux內(nèi)核中,在文件系統(tǒng)中不可見

? 是用pipe創(chuàng)建的一個(gè)內(nèi)核文件

特點(diǎn):

1.只能用于具有親緣關(guān)系(父子,子孫,兄弟)的進(jìn)程間的通信,

2.是一種單工通信模式(理論上是雙工的,但是通信雙方的收發(fā)順序不好控制,通常用作單工)

3.無名管道的數(shù)據(jù)存放在內(nèi)存中,管道中的數(shù)據(jù)讀走后就不存在了,無名管道只存在在內(nèi)核中,在文件系統(tǒng)中不可見

不好用?。?!

? pipe函數(shù):

#include//作用:創(chuàng)建無名管道

int pipe(int fd[2]);

//pipefd[2]:數(shù)組,fd[0]用來標(biāo)識(shí)讀管道文件
                 //fd[1]用來標(biāo)識(shí),寫管道文件(IO函數(shù),read,write)
//參數(shù):有兩個(gè)整數(shù)的數(shù)組

//成功返回0,失敗返回-1
#include#include#include#define SIZE 30

//無名管道

int main()
{

	//創(chuàng)建無名管道
    //fd[0],fd[1]是文件描述符
	//fd[0]用來標(biāo)識(shí)讀出管道文件
	//fd[1]用來標(biāo)識(shí)寫入管道文件
	int fd[2]={0};
	if(0!=pipe(fd))
	{
		return -1;
	}
	printf("create piped success\r\n");
	//創(chuàng)建一個(gè)子進(jìn)程
	pid_t pid=-1;
	pid=fork();
	if(pid==-1)
	{
		//進(jìn)程未創(chuàng)建成功
		return -1;
	}
	char buf[SIZE]={0};
	if(pid==0)
	{
		//進(jìn)入子進(jìn)程,write
		
		printf("child process----\r\n");
		strcpy(buf,"child to parent");
		//write(int fd,const void *buf,size_t count)
		//參數(shù)1:文件描述符
		//參數(shù)2:要寫的內(nèi)存空間的首地址
		//參數(shù)3:要寫的內(nèi)容的大小
		write(fd[1],buf,SIZE);
		//printf("buf=%s\r\n",buf);
	}
	if(pid!=0)
	{
		//進(jìn)入父進(jìn)程
		printf("parent process----\r\n");
		//read(int fd,void *buf,size_t count)
		//參數(shù)1:文件描述符
		//參數(shù)2:要讀的內(nèi)存空間的首地址
		//參數(shù)3:要讀的內(nèi)容的大小
		read(fd[0],buf,SIZE);
	
		printf("read success,buf=%s\r\n",buf);
	}
	
	return 0;
}

2.有名管道(用于任意進(jìn)程間的通信)

? 有名管道使用mkfifo創(chuàng)建的一個(gè)內(nèi)核文件,用于任意兩個(gè)進(jìn)程之間的通信

? 管道文件在文件系統(tǒng)中可見

#include#includeint mkfifo(const char *pathname, mode_t mode);

//作用:創(chuàng)建一個(gè)有名管道
//*pathname:是有名管道文件的名稱
//mode :文件的權(quán)限
//返回值:成功返回0,失敗返回-1


//A進(jìn)程數(shù)據(jù)傳到B進(jìn)程
A:
    1.mkfifo->有名稱
    2.open
    3.write
B:
    1.mkfifo
    2.open
    3.read

特點(diǎn):

1.有名管道可以用于任意兩個(gè)進(jìn)程間的通信

2.可以實(shí)現(xiàn)雙工通信,是建立在兩個(gè)管道上的

3.有名管道中的數(shù)據(jù)存放在內(nèi)存中,數(shù)據(jù)讀走后就沒有了

4.有名管道文件在文件系統(tǒng)中可見,文件大小為0,因?yàn)閿?shù)據(jù)存放在內(nèi)存中

先寫后讀?

#include#include#include#define SIZE 30

//無名管道

int main()
{

	//創(chuàng)建無名管道
	//fd[0]用來標(biāo)識(shí)讀出管道文件
	//fd[1]用來標(biāo)識(shí)寫入管道文件
	int fd[2]={0};
	if(0!=pipe(fd))
	{
		return -1;
	}
	printf("create piped success\r\n");
	//創(chuàng)建一個(gè)子進(jìn)程
	pid_t pid=-1;
	pid=fork();
	if(pid==-1)
	{
		//進(jìn)程未創(chuàng)建成功
		return -1;
	}
	char buf[SIZE]={0};
	if(pid==0)
	{
		//進(jìn)入子進(jìn)程,write
		
		printf("child process----\r\n");
		strcpy(buf,"child to parent");
		//write(int fd,const void *buf,size_t count)
		//參數(shù)1:文件描述符
		//參數(shù)2:要寫的內(nèi)存空間的首地址
		//參數(shù)3:要寫的內(nèi)容的大小
		write(fd[1],buf,SIZE);
		//printf("buf=%s\r\n",buf);
	}
	if(pid!=0)
	{
		//進(jìn)入父進(jìn)程
		printf("parent process----\r\n");
		//read(int fd,void *buf,size_t count)
		//參數(shù)1:文件描述符
		//參數(shù)2:要讀的內(nèi)存空間的首地址
		//參數(shù)3:要讀的內(nèi)容的大小
		read(fd[0],buf,SIZE);
	
		printf("read success,buf=%s\r\n",buf);
	}
	
	return 0;
}

先讀后寫

#include#include#include#include#include#include#include#define SIZE 20

int main()
{
	//1.1.mkfifoA   
	int ret=-1;
	ret=mkfifo("fifoa",0666);
	//創(chuàng)建文件失敗并且該文件不存在
	if(ret< 0 &&EEXIST!=errno)
	{
		printf("error\r\n");
		return -1;//創(chuàng)建文件失敗
	}
	//創(chuàng)建文件失敗但是該文件存在--》創(chuàng)建文件成功
	printf("1.1:create fifoa ok!----\r\n");
	

	//1.2.mkfifoB  
	ret=mkfifo("fifob",0666);
	//創(chuàng)建文件失敗并且該文件不存在
	if(ret< 0 &&EEXIST!=errno)
	{
		printf("error\r\n");
		return -1;//創(chuàng)建文件失敗
	}
	//創(chuàng)建文件失敗但是該文件存在--》創(chuàng)建文件成功
	printf("1.2:create fifob ok!----\r\n");


	//2.1.open fifoa
	int fdr=open("fifoa",O_RDONLY,0666);
	if(-1 == fdr)
	{
		perror("open error");
		return -1;
	}
	printf("2.1:open fifoa ok!-----\r\n");
	
	//2.2.open fifob
	int fdw=open("fifob",O_WRONLY,0666);
	if(-1 == fdw)
	{
		perror("open error");
		return -1;
	}
	printf("2.2:open fifob ok!-----\r\n");
	
	char buf[SIZE]={0};
	while(1)
	{
		
		//read
		memset(buf,0,SIZE);
		read(fdr,buf,SIZE);
		printf("a->b:%s\r\n",buf);

		
		//write
		memset(buf,0,SIZE);
		fgets(buf,SIZE,stdin);
		write(fdw,buf,SIZE);
	}
	
	//5.close
	close(fdw);
	close(fdr);

	return 0;
}

兩個(gè)同時(shí)運(yùn)行,可實(shí)現(xiàn)通信?

3.信號(hào)通信 (唯一一種異步通信方式)

異步:被通信方不知道什么時(shí)候通信,

進(jìn)程:task_struct+4G的虛擬空間

用戶空間進(jìn)程:task_struct+(0G-3G)的虛擬空間

內(nèi)核空間進(jìn)程:task_struct+(3G-4G)的虛擬空間

信號(hào):linux操作系統(tǒng)預(yù)先定義好了64個(gè)信號(hào)(操作系統(tǒng)提供)

?kill -l :查看當(dāng)前系統(tǒng)提供的所有信號(hào)

kill -9? 進(jìn)程號(hào):程序員調(diào)用,給內(nèi)核發(fā)送SIGKILL信號(hào),讓內(nèi)核殺死指定的進(jìn)程號(hào)的進(jìn)程

用戶進(jìn)程對(duì)信號(hào)的響應(yīng)方式:捕獲信號(hào),忽略信號(hào),采用默認(rèn)處理動(dòng)作

signal (信號(hào),自定義的信號(hào)對(duì)應(yīng)的處理函數(shù))--->用來改變信號(hào)的默認(rèn)處理狀態(tài)

實(shí)現(xiàn)兩個(gè)進(jìn)程的異步通信(信號(hào)通信)

A? ?收信號(hào)進(jìn)程:要用signal注冊(cè)信號(hào)處理函數(shù),signal?,pause

B? ?發(fā)信號(hào)進(jìn)程:kill (),

//kill

#include#includeint kill(pid_t pid,int sig);

//參數(shù)1:對(duì)方的進(jìn)程號(hào)
//參數(shù)2:要發(fā)送的信號(hào)

同步通信和異步通信:

? 同步通信:發(fā)送方發(fā)數(shù)據(jù),接收方收數(shù)據(jù),雙方需要在很短的時(shí)間內(nèi)完成數(shù)據(jù)交換,否則會(huì)造成一方阻塞

? 異步通信:被通信方不知道通信方什么時(shí)候和它通信

#includetypedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);

//作用:設(shè)置某一信號(hào)的動(dòng)作
//參數(shù)1:要處理的信號(hào)類型,可以取除了SIGKILL和SIGSTOP之外的任意一種信號(hào)
//參數(shù)2:描述了與信號(hào)關(guān)聯(lián)的動(dòng)作-->有3個(gè)
//返回值:成功返回先前的信號(hào)處理函數(shù)指針,錯(cuò)誤返回-1
SIG_IGN   //表示忽略該信號(hào)

-->SIG_DFL    //表示恢復(fù)對(duì)信號(hào)的系統(tǒng)默認(rèn)處理,不寫的話此處理默認(rèn)也是執(zhí)行系統(tǒng)默認(rèn)處理
                   

-->sighandler_t類型的函數(shù)指針
:
        typedef void (*sighandler_t)(int);

        sighandler_t signal(int signum, sighandler_t handler);

?此函數(shù)必須在signal()被調(diào)用前申明,handler(參數(shù)2)中為這個(gè)函數(shù)名,當(dāng)接收到一個(gè)類型為sig的信號(hào)時(shí),就執(zhí)行handler 所指定的函數(shù),(int)signum是傳遞給它的唯一參數(shù)。執(zhí)行了signal()調(diào)用后,進(jìn)程只要接收到類型為sig的信號(hào),不管其正在執(zhí)行程序的哪一部分,就立即執(zhí)行func()函數(shù)。當(dāng)func()函數(shù)執(zhí)行結(jié)束后,控制權(quán)返回進(jìn)程被中斷的那一點(diǎn)繼續(xù)執(zhí)行。?

常用的Signal信號(hào):

轉(zhuǎn)載自Signal ()函數(shù)詳細(xì)介紹_懷想天空2010的博客-博客_signal函數(shù)

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)站欄目:進(jìn)程的通信-創(chuàng)新互聯(lián)
當(dāng)前URL:http://sd-ha.com/article34/shhpe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、網(wǎng)站建設(shè)網(wǎng)站制作、企業(yè)網(wǎng)站制作、動(dòng)態(tài)網(wǎng)站電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

營(yíng)銷型網(wǎng)站建設(shè)