ºìÁªLinuxÃÅ»§
Linux°ïÖú

Linux pipeѧϰ

·¢²¼Ê±¼ä:2014-06-12 10:30:44À´Ô´:ºìÁª×÷Õß:velcbo
pipeÓÃÓÚÔÚ¾ßÓÐѪԵ¹ØÏµµÄ½ø³ÌÖ®¼äµÄͨÐÅ¡£
pipeµ¥¶À¹¹³ÉÒ»ÖÖ¶ÀÁ¢µÄÎļþϵͳ£¬¶ÔÓڹܵÀÁ½¶ËµÄ½ø³Ì¶øÑÔ£¬Ëü¾ÍÊÇÒ»¸öÎļþ£¬µ«Ëü²»ÊÇÆÕͨµÄÎļþ£»
¹ÜµÀ²»ÊôÓÚÏÖÓеÄij¸öÎļþϵͳ£¬Ëüµ¥¶À¹¹³ÉÒ»ÖÖÎļþϵͳ£¬´æÔÚÓÚÄÚ´æÖУ»
³ýÁ˶ԾßÓÐѪԵ¹ØÏµµÄ½ø³ÌÍ⣬¹ÜµÀ¶ÔÓÚÆäËüµÄ½ø³ÌÊDz»¿É¼ûµÄ¡£

ʹÓÃpipeϵͳµ÷ÓÿÉÒÔÓÃÀ´´´½¨Ò»¸ö¹ÜµÀ£¬
#include

int pipe(int pipefd[2]);
ÆäÖÐpipefd[0]ÊǶÁÊý¾Ý¶Ë£¬pipefd[1]ÊÇдÊý¾Ý¶Ë¡£

Ëùν°ëË«¹¤£¬¾ÍÊÇÔÚÒ»¶Îʱ¼äÄÚ£¬Êý¾ÝÖ»ÄÜ´ÓÒ»¶Ëµ½ÁíÒ»¶Ë´«Ê䣻
Ëùνȫ˫¹¤£¬¾ÍÊÇͬһ¸öʱ¼ä¼ÈÔÊÐí¶Á¡¢Ò²ÔÊÐíд¡£
ËùÒÔ£¬pipeºÍFIFO¶¼ÊÇÊôÓÚ°ëË«¹¤Í¨ÐÅ¡£

Èç¹ûÐèÒª´Ópipe¶ÁÊý¾Ý£¬ÐèÒªÏȽ«Ð´Êý¾ÝÃèÊö·û¹Øµô£»
Èç¹ûÒªÏòpipeдÊý¾Ý£¬ÐèÒªÏȽ«¶ÁÊý¾ÝÃèÊö·û¹Øµô¡£

ls | more£¬ËüÊǽ«lsµÄ±ê×¼Êä³ö͸¹ý¹ÜµÀ×÷Ϊmore³ÌÐòµÄ±ê×¼ÊäÈë¡£
ËüºÍʹÓÃÁÙʱÎļþµÄ·½·¨£ºls > temp; more < temp;
ÀàËÆ£¬µ«ÊÇÏà±ÈÓÚÁÙʱÎļþµÄ·½·¨£¬Ê¹ÓùܵÀ¾ßÓиü¸ßµÄ³ÌÐòЧÂÊ¡£

ls | moreµÄÖ´Ðйý³Ì£º
1. µ÷ÓÃpipeϵͳµ÷Óô´½¨¹ÜµÀ£»
2. µ÷ÓÃforkϵͳ´´½¨Á½¸ö½ø³ÌÓÃÀ´×°ÔعܵÀÁ½±ßµÄ³ÌÐò£»
#include

pid_t fork(void);
3. close¹ÜµÀ×ó±ßµÄ¶ÁÊý¾ÝÃèÊö·ûºÍ¹ÜµÀÓұߵÄдÊý¾ÝÃèÊö·û£»
#include

int close(int fd);
4. ÆäÖÐÒ»¸ö½ø³ÌÖ´ÐÐls³ÌÐò£¬Ëü»áÏÈ
dup2(writefd, stdout);
½«±ê×¼Êä³östdoutÖØ¶¨Ïòµ½writefd¡£
ÕâÑùÖ´ÐÐls³ÌÐòµÄ±ê×¼Êä³ö½á¹û¾Í»á±»Öض¨Ïòµ½writefd£»
5. ÁíÍâÒ»¸ö½ø³ÌÓÃÀ´Ö´ÐÐmore³ÌÐò£¬Ëü»áÏÈ
dup2(readfd, stdin);
½«±ê×¼Êä³öÖØ¶¨Ïòµ½readfd¡£
ÕâÑùexecve()Ö´ÐÐ/bin/moreʱ¾Í»áĬÈÏ´Óstdin¶ÁÊý¾Ý¡£
#include

int dup2(int oldfd, int newfd);
dup2ϵͳµ÷ÓÃÔÚÖØ¶¨Ïò½ø³ÌµÄstdin¡¢stdoutºÍstderrʱ·Ç³£ÓÐÓá£

×÷Õߣºboyxulin1986
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ