閒來無事,自己實現了popen函數mypopen,後來查看了popen函數的源碼發現自己實現的與其相差無幾,本函數與linux中的實現最大的不同是不需要用專門的pclose()函數來關閉文件指針,用普通的fclose()即可,linux實現的代碼也會給出在下文,可以對比一下其中差異。
主要通過pipe管道實現,具體思路如下:
1、使用pipe()建立管道
2、使用fork()創建子進程
3、在子進程中調用exec族函數執行命令,通過管道將結果傳送至父進程
4、在主進程中等待子進程執行,子進程執行完成後將接收其結果,返回結果的文件指針
下面是mypopen源代碼,重點部位已通過註釋進行標註:
下面是popen()在linux中的實現:
參考資料,真誠致謝:
http://www.linuxforum.net/forum/showflat.php?Cat=&Board=program&Number=266385