# get argument for pipe here if it has.
#start pipe
echo
'call popen start: '.
date
("h:i:s"
), "/n";
$pipe = popen
(dirname
(__file__
) .
'/t.sh',
'r');
echo
'call popen end: '.
date
("h:i:s"
), "/n";
#other code here
sleep (5
); echo
"here is my code. time: " .
date
("h:i:s"
), "/n";
#read pipe result
while
($s =
fgets
($pipe,
1024))
pipe指令碼:
echo
1, `date +%t`;
sleep
1; echo
2, `date +%t`;
sleep
10;echo
3, `date +%t`;
輸出如下:
call popen start: 10:16:40
call popen end: 10:16:40
here is my code. time: 10:16:45
1, 10:16:40
2, 10:16:41
3, 10:16:51
**方面, 我們有三個sleep。
php中乙個 sleep 5,
sh中兩個sleep, 10+1
如果使用序列的方式, 那麼用時應該是10+1+5 = 16秒。
而使用pipe方式, 用時僅為:max(php, pipe) = max(5,11) = 11秒。
ps:很抱歉,空間服務商看起來不喜歡popen這個字眼, 所以只能將起替換成全形的了。請在使用時,替換一下吧:)
自己實現popen函式
閒來無事,自己實現了popen函式mypopen,後來檢視了popen函式的原始碼發現自己實現的與其相差無幾,本函式與linux中的實現最大的不同是不需要用專門的pclose 函式來關閉檔案指標,用普通的fclose 即可,linux實現的 也會給出在下文,可以對比一下其中差異。主要通過pipe管道...
popen函式的實現
注 本文 本人有修改對 open max 的呼叫 popen函式的實現包括一下幾步 1 使用pipe 建立管道 2 使用fork 建立子程序 3 在子程序中呼叫exec族函式執行命令,通過管道將結果傳送至父程序 4 在主程序中等待子程序執行,子程序執行完成後將接收其結果,返回結果的檔案指標 類似與s...
popen函式的實現
popen函式的實現包括一下幾步 1 使用pipe 建立管道 2 使用fork 建立子程序 3 在子程序中呼叫exec族函式執行命令,通過管道將結果傳送至父程序 4 在主程序中等待子程序執行,子程序執行完成後將接收其結果,返回結果的檔案指標 類似與system fork與exec函式的組合 pope...