国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁(yè) php教程 php手冊(cè) php進(jìn)程間通訊--有名管道

php進(jìn)程間通訊--有名管道

Dec 05, 2016 pm 01:27 PM

php管線通訊
本人部落格:http://www.cnblogs.com/nickbai/
本人GitHub:https://github.com/nick-bai

php進(jìn)行進(jìn)程間通訊的方式有好幾種:訊息隊(duì)列,管道,共享內(nèi)存,socket,信號(hào)。本文介紹的是透過(guò)有名管道的方式?! ?br>
  管道PIPE

  管道用於承載簡(jiǎn)稱之間的通訊資料。為了方便理解,可以將管道比喻為文件,進(jìn)程A將資料寫(xiě)到管道P中,然後進(jìn)程B從管道P中讀取資料。 php提供的管道操作API與操作文件的API基本上一樣,除了建立管道使用posix_mkfifo函數(shù),讀寫(xiě)等操作都與檔案操作函數(shù)相同。當(dāng)然,你可以直接使用檔案模擬管道,但是那樣無(wú)法使用管道的特性了。

  透過(guò)管道通訊的大概思路是,首先創(chuàng)建一個(gè)管道,然後子進(jìn)程向管道中寫(xiě)入信息,父進(jìn)程從管道中讀取信息,這樣就可以做到父子進(jìn)程直接實(shí)現(xiàn)通信了。 <?php <br/>/**<br>?*?author:?NickBai<br>?*?createTime:?2016/12/2?0002?上午?11:12<br>?*/<br>//建立管道<br>$pipePath?=?"/tmp/test.pipe";<br>if(?!file_exists(?$pipePath??){<br>?p. ,?0666?)?){<br>????????exit('make?pipe?false!'?.?PHP_EOL);<br>????}<}<br>}<br>處理程序();<br><br>if( $pid?==?0?){<br>????//子程序?qū)懭牍艿?lt;br>????$file?=?fopen(?$pipePath,?'w'?);<br>??1); <br>????exit() ;<br>}else{<br>????//父程式讀取管道<br>????$file?=?fopen(?$pipePath,?'r'?);<br>???//stream_set_blocking(F1file)<br>?echo?fread(?$ file,?20?)?.?PHP_EOL;<br><br>????pcntl_wait($status);??//回收子程序<br>}<br> ? ? ?<br>在:本程式碼時(shí)只能於<br>  第7行:指定一個(gè)管道的路徑,這裡跟普通文件沒(méi)什麼區(qū)別。   第9行:透過(guò) posix_mkfifo 函數(shù)建立 管道 並且設(shè)定讀寫(xiě)權(quán)限為 0666

  第15行:透過(guò) pcntl_fork函數(shù)建立一個(gè)子程序。注意從現(xiàn)在開(kāi)始,程式將會(huì)被分成兩個(gè)流程來(lái)執(zhí)行。 pcntl_fork 函數(shù) 很特殊,它呼叫一次擁有 多個(gè)回傳值。在父進(jìn)程中:它回傳 子進(jìn)程的ID 這個(gè)值是 大於0 的。在子進(jìn)程中,它回傳0。當(dāng)傳回 -1 時(shí)表示建立進(jìn)程失敗。

? 第17行:兩個(gè)進(jìn)程依目前進(jìn)程所獲得的$pid的值不同,而進(jìn)入不同的分支。

  ?第18~22行:子進(jìn)程打開(kāi)管道,並向其中寫(xiě)入hello world ,然後進(jìn)入休眠,休眠結(jié)束之後,退出。

  ?第25~29行:父進(jìn)程開(kāi)啟管道,並進(jìn)行讀取,最後執(zhí)行 29行的程式碼回收掉子進(jìn)程。這裡面兩個(gè)地方是阻塞的,首先是預(yù)設(shè)讀的地方,要等待子程序發(fā)出exit指令之後,才能回傳資料。還有就是回收進(jìn)程的 pcntl_wait方法。要等到進(jìn)程退出。

  ?在linux 下運(yùn)行程式碼:


會(huì)看到程式阻塞 1秒 之後,輸出 hello world。
php進(jìn)程間通訊--有名管道  當(dāng)我們打開(kāi)第26 行程式碼,並將27行改為var_dump(fread( $file, 20 )) . PHP_EOL; 時(shí),運(yùn)行程式:


 能看到程式立刻輸出中之後退出。這是因?yàn)?。?dāng)讀取是非阻塞的情況下,父進(jìn)程進(jìn)行讀取訊息的時(shí)候,不會(huì)等待立刻有訊息,管道中沒(méi)有訊息,也會(huì)立刻回傳。然後執(zhí)行到 29行回收子程序的時(shí)候,阻塞等待子程序退出後結(jié)束。
php進(jìn)程間通訊--有名管道下面來(lái)看一個(gè)簡(jiǎn)單的實(shí)際小例子。兩個(gè)子進(jìn)程向一個(gè)檔案寫(xiě)訊息,父進(jìn)程負(fù)責(zé)監(jiān)聽(tīng)偵測(cè)這個(gè)檔案是否寫(xiě)入完成,完成之後,講這個(gè)檔案copy一份。這裡,父子進(jìn)程之間透過(guò)管道通信,確認(rèn)是否完成寫(xiě)入。
/**
?*?author:?NickBai?*?createTime:?2016/12/2?0002?下午?2:00<br>?*/<br>//建立管道<br>$pipePath?=?"/tmp/test.pipe";<br>if(?!file_exists(?$pipePath?)?){<br>????if(?!posix_mkfifo(?$pipePath,?0666?)?){??); }<br>}<br><br>//建立兩個(gè)子程序?qū)懭霗n案<br>for (?$i?=?0;?$i?<br>????$pid?=?pcntl_fork(); './pipe.log',?$i?.?"?write pipen",?FILE_APPEND?);??//寫(xiě)入檔案<br>????????$file?=?fopen(?$pipePath,?'w'?); /向管道中寫(xiě)標(biāo)識(shí),標(biāo)識(shí)寫(xiě)入完畢。 <br>????????fclose(?$file?);<br>????????exit();??//退出子程序<br>????exit();??//退出子程序<br>???完<br>//2、拷貝寫(xiě)好的文件<br>//3、刪除管道<br>//4、回收程序<br><br>$file?=?fopen(?$pipePath,?'r'?);<br>$line?=?0 ){<br>????$end?=?fread(?$file,?1024?);<br>????foreach(?str_split(?$end?)?as?==$c)H <br>????????????$line++;<br>????????}<br>????}<br>?(?$line?==?2?){<br>????????copy(?'./pipe.log',?'./pipe_copy.log'?);?????$pipePath?);<br>????????pcntl_wait(?$status?);<br> exit("ok?n");<br>????}<br>}<br><br><br><br><br> <br>

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門(mén)話題

Go語(yǔ)言程式設(shè)計(jì)實(shí)例:Web開(kāi)發(fā)中的程式碼範(fàn)例 Go語(yǔ)言程式設(shè)計(jì)實(shí)例:Web開(kāi)發(fā)中的程式碼範(fàn)例 Mar 04, 2024 pm 04:54 PM

《Go語(yǔ)言程式設(shè)計(jì)實(shí)例:Web開(kāi)發(fā)中的程式碼範(fàn)例》隨著網(wǎng)路的快速發(fā)展,Web開(kāi)發(fā)已成為各行業(yè)中不可或缺的一部分。作為一門(mén)功能強(qiáng)大且效能優(yōu)越的程式語(yǔ)言,Go語(yǔ)言在Web開(kāi)發(fā)中越來(lái)越受到開(kāi)發(fā)者們的青睞。本文將透過(guò)具體的程式碼範(fàn)例,介紹如何利用Go語(yǔ)言進(jìn)行Web開(kāi)發(fā),讓讀者更能理解並運(yùn)用Go語(yǔ)言來(lái)建立自己的Web應(yīng)用。 1.簡(jiǎn)單的HTTP伺服器首先,讓我們從一個(gè)

華為雲(yún)端邊緣運(yùn)算對(duì)接指南:Java程式碼範(fàn)例快速實(shí)作接口 華為雲(yún)端邊緣運(yùn)算對(duì)接指南:Java程式碼範(fàn)例快速實(shí)作接口 Jul 05, 2023 pm 09:57 PM

華為雲(yún)端邊緣運(yùn)算對(duì)接指南:Java程式碼範(fàn)例快速實(shí)現(xiàn)介面隨著物聯(lián)網(wǎng)技術(shù)的快速發(fā)展和邊緣運(yùn)算的興起,越來(lái)越多的企業(yè)開(kāi)始關(guān)注邊緣運(yùn)算的應(yīng)用。華為雲(yún)端提供了邊緣運(yùn)算服務(wù),為企業(yè)提供了高可靠的運(yùn)算資源和便利的開(kāi)發(fā)環(huán)境,使得邊緣運(yùn)算應(yīng)用更容易實(shí)現(xiàn)。本文將介紹如何透過(guò)Java程式碼快速實(shí)現(xiàn)華為雲(yún)端邊緣運(yùn)算的介面。首先,我們需要準(zhǔn)備好開(kāi)發(fā)環(huán)境。確保你已經(jīng)安裝了Java開(kāi)發(fā)工具包(

了解Python編程的入門(mén)級(jí)程式碼範(fàn)例 了解Python編程的入門(mén)級(jí)程式碼範(fàn)例 Jan 04, 2024 am 10:50 AM

了解Python程式設(shè)計(jì)的入門(mén)程式碼範(fàn)例Python是一種簡(jiǎn)單易學(xué),功能強(qiáng)大的程式語(yǔ)言。對(duì)於初學(xué)者來(lái)說(shuō),了解Python程式設(shè)計(jì)的入門(mén)級(jí)程式碼範(fàn)例是非常重要的。本文將為您提供一些具體的程式碼範(fàn)例,幫助您快速入門(mén)。列印HelloWorldprint("HelloWorld")這是Python中最簡(jiǎn)單的程式碼範(fàn)例。 print()函數(shù)用於將指定的內(nèi)容輸出

Java實(shí)作簡(jiǎn)單的冒泡排序程式碼 Java實(shí)作簡(jiǎn)單的冒泡排序程式碼 Jan 30, 2024 am 09:34 AM

Java冒泡排序最簡(jiǎn)單的程式碼範(fàn)例冒泡排序是一種常見(jiàn)的排序演算法,它的基本想法是透過(guò)相鄰元素的比較和交換來(lái)將待排序序列逐步調(diào)整為有序序列。以下是一個(gè)簡(jiǎn)單的Java程式碼範(fàn)例,示範(fàn)如何實(shí)作冒泡排序:publicclassBubbleSort{publicstaticvoidbubbleSort(int[]arr){int

PHP 變數(shù)的實(shí)際應(yīng)用:10 個(gè)實(shí)際使用範(fàn)例 PHP 變數(shù)的實(shí)際應(yīng)用:10 個(gè)實(shí)際使用範(fàn)例 Feb 19, 2024 pm 03:00 PM

PHP變數(shù)儲(chǔ)存程式運(yùn)行期間的值,對(duì)於建立動(dòng)態(tài)且互動(dòng)的WEB應(yīng)用程式至關(guān)重要。本文將深入探討php變量,並透過(guò)10個(gè)真實(shí)的範(fàn)例展示它們的實(shí)際應(yīng)用。 1.儲(chǔ)存使用者輸入$username=$_POST["username"];$passWord=$_POST["password"];此範(fàn)例從表單提交中提取使用者名稱和密碼,並將其儲(chǔ)存在變數(shù)中以供進(jìn)一步處理。 2.設(shè)定配置值$database_host="localhost";$database_username="username";$database_pa

如何使用PHP編寫(xiě)庫(kù)存管理系統(tǒng)中的庫(kù)存分倉(cāng)管理功能代碼 如何使用PHP編寫(xiě)庫(kù)存管理系統(tǒng)中的庫(kù)存分倉(cāng)管理功能代碼 Aug 06, 2023 pm 04:49 PM

如何使用PHP編寫(xiě)庫(kù)存管理系統(tǒng)中的庫(kù)存分倉(cāng)管理功能碼庫(kù)存管理是許多企業(yè)中不可或缺的一部分。對(duì)於擁有多個(gè)倉(cāng)庫(kù)的企業(yè)來(lái)說(shuō),庫(kù)存分倉(cāng)管理功能尤其重要。透過(guò)合理管理和追蹤庫(kù)存,企業(yè)可以實(shí)現(xiàn)不同倉(cāng)庫(kù)之間的庫(kù)存調(diào)撥,優(yōu)化營(yíng)運(yùn)成本,改善協(xié)同效率。本文將介紹如何使用PHP編寫(xiě)庫(kù)存分倉(cāng)管理功能的程式碼,並為您提供相關(guān)的程式碼範(fàn)例。一、建立資料庫(kù)在開(kāi)始編寫(xiě)庫(kù)存分倉(cāng)管理功能的程式碼之

從入門(mén)到精通:Go語(yǔ)言中常用資料結(jié)構(gòu)的程式碼實(shí)現(xiàn) 從入門(mén)到精通:Go語(yǔ)言中常用資料結(jié)構(gòu)的程式碼實(shí)現(xiàn) Mar 04, 2024 pm 03:09 PM

標(biāo)題:從入門(mén)到精通:Go語(yǔ)言中常用資料結(jié)構(gòu)的程式碼實(shí)作資料結(jié)構(gòu)在程式設(shè)計(jì)中起著至關(guān)重要的作用,它是程式設(shè)計(jì)的基礎(chǔ)。在Go語(yǔ)言中,有許多常用的資料結(jié)構(gòu),掌握這些資料結(jié)構(gòu)的實(shí)作方式對(duì)於成為優(yōu)秀的程式設(shè)計(jì)師至關(guān)重要。本文將介紹Go語(yǔ)言中常用的資料結(jié)構(gòu),並給出對(duì)應(yīng)的程式碼範(fàn)例,幫助讀者從入門(mén)到精通這些資料結(jié)構(gòu)。 1.數(shù)組(Array)數(shù)組是一種基本的資料結(jié)構(gòu),是一組相同類型

指導(dǎo)與範(fàn)例:學(xué)習(xí)Java選擇排序演算法的實(shí)現(xiàn) 指導(dǎo)與範(fàn)例:學(xué)習(xí)Java選擇排序演算法的實(shí)現(xiàn) Feb 18, 2024 am 10:52 AM

Java選擇排序法程式碼編寫(xiě)指南及範(fàn)例選擇排序是一種簡(jiǎn)單直觀的排序演算法,其想法是每次從未排序的元素中選擇最小(或最大)的元素進(jìn)行交換,直到所有元素排序完成。本文將提供選擇排序的程式碼編寫(xiě)指南,並附上具體的Java範(fàn)例程式碼。演算法原理選擇排序的基本原理是將待排序數(shù)組分為已排序和未排序兩部分,每次從未排序部分選擇最?。ɑ蜃畲螅┑脑?,將其放到已排序部分的末尾。重複上述

See all articles