pipe

Autres langues

Langue: ja

Version: 2004-06-17 (openSuse - 09/10/07)

Section: 2 (Appels système)

̾Á°

pipe - ¥Ñ¥¤¥×¤òÀ¸À®¤¹¤ë

½ñ¼°

#include <unistd.h>

int pipe(int filedes[2]);

ÀâÌÀ

pipe() ¤Ï¥Ñ¥¤¥×¤Î inode ¤ò»Ø¤¹¥Õ¥¡¥¤¥ë¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¡¼ (descripter) ¤ÎÁȤòÀ¸À®¤·¡¢ ¤½¤Î¥Õ¥¡¥¤¥ë¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¡¼¤ò filedes ¤Ç¼¨¤µ¤ì¤ëÇÛÎó¤Ë³ÊǼ¤¹¤ë¡£ filedes[0] ¤Ë¤ÏÆɤ߽Ф·ÍÑ¡¢ filedes[1] ¤Ë¤Ï½ñ¤­¹þ¤ßÍѤΥե¡¥¤¥ë¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¡¼¤¬³ÊǼ¤µ¤ì¤ë¡£

ÊÖ¤êÃÍ

À®¸ù¤·¤¿¾ì¹ç 0 ¤¬Ê֤롣¼ºÇÔ¤·¤¿¾ì¹ç -1 ¤¬Ê֤ꡢ errno ¤¬¥¨¥é¡¼¤ÎÆâÍƤ˽¾¤Ã¤ÆÀßÄꤵ¤ì¤ë¡£

¥¨¥é¡¼

EFAULT
filedes ¤¬Ìµ¸ú¤ÊÃͤǤ¢¤ë¡£
EMFILE
¤³¤Î¥×¥í¥»¥¹¤Ç»È¤ï¤ì¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¡¼¤¬Â¿¤¹¤®¤ë¡£
ENFILE
¥ª¡¼¥×¥ó¤µ¤ì¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¤ÎÁí¿ô¤¬¥·¥¹¥Æ¥à¤ÎÀ©¸Â¤Ë㤷¤¿¡£

½àµò

POSIX.1-2001.

Îã

°Ê²¼¤Î¥×¥í¥°¥é¥à¤Ç¤Ï¥Ñ¥¤¥×¤òÀ¸À®¤·¡¢¤½¤Î¸å fork(2) ¤Ç»Ò¥×¥í¥»¥¹¤òÀ¸À®¤¹¤ë¡£ fork(2) ¤Î¸å¡¢³Æ¥×¥í¥»¥¹¤Ï¥Ñ¥¤¥× (pipe(7) ¤ò»²¾È) ¤ËɬÍפ¬¤Ê¤¯¤Ê¤Ã¤¿¥Ç¥£¥¹¥¯¥ê¥×¥¿¡¼¤ò¥¯¥í¡¼¥º¤¹¤ë¡£ ¿Æ¥×¥í¥»¥¹¤Ï¥×¥í¥°¥é¥à¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó°ú¤­¿ô¤Ë´Þ¤Þ¤ì¤ë ʸ»úÎó¤ò¥Ñ¥¤¥×¤Ø½ñ¤­¹þ¤ß¡¢ »Ò¥×¥í¥»¥¹¤Ï¤³¤Îʸ»úÎó¤ò¥Ñ¥¤¥×¤«¤é 1 ¥Ð¥¤¥È¤º¤ÄÆɤ߹þ¤ó¤Çɸ½à½ÐÎϤ˥¨¥³¡¼¤¹¤ë¡£



#include <sys/wait.h>

#include <assert.h>

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <string.h>



int

main(int argc, char *argv[])

{

    int pfd[2];

    pid_t cpid;

    char buf;



    assert(argc == 2);



    if (pipe(pfd) == -1) { perror("pipe"); exit(EXIT_FAILURE); }



    cpid = fork();

    if (cpid == -1) { perror("fork"); exit(EXIT_FAILURE); }



    if (cpid == 0) {    /* »Ò¥×¥í¥»¥¹¤¬¥Ñ¥¤¥×¤«¤éÆɤ߹þ¤à */

        close(pfd[1]);  /* »ÈÍѤ·¤Ê¤¤ write ¦¤Ï¥¯¥í¡¼¥º¤¹¤ë */



        while (read(pfd[0], &buf, 1) > 0)

            write(STDOUT_FILENO, &buf, 1);



        write(STDOUT_FILENO, "\n", 1);

        close(pfd[0]);

        _exit(EXIT_SUCCESS);



    } else {            /* ¿Æ¥×¥í¥»¥¹¤Ï argv[1] ¤ò¥Ñ¥¤¥×¤Ø½ñ¤­¹þ¤à */

        close(pfd[0]);  /* »ÈÍѤ·¤Ê¤¤ read ¦¤Ï¥¯¥í¡¼¥º¤¹¤ë */

        write(pfd[1], argv[1], strlen(argv[1]));

        close(pfd[1]);          /* Æɤ߹þ¤ß¦¤¬ EOF ¤Ë½Ð²ñ¤¦ */

        wait(NULL);             /* »Ò¥×¥í¥»¥¹¤òÂÔ¤Ä */

        exit(EXIT_SUCCESS);

    }

}

´ØÏ¢¹àÌÜ

fork(2), read(2), socketpair(2), write(2), popen(3), pipe(7)