linux man page : pipe - ÆÄÀÌÇÁ¸¦ »ý¼ºÇÑ´Ù.
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.


1Àå. pipe(2)

Â÷·Ê
1.1Àý. »ç¿ë¹ý
1.2Àý. ¼³¸í
1.3Àý. ¹Ýȯ°ª
1.4Àý. ¿¡·¯
1.5Àý. ¿¹Á¦

ÆÄÀÌÇÁ¸¦ »ý¼ºÇÑ´Ù.


1.1Àý. »ç¿ë¹ý

#include <unistd.h>

int pipe(int filedes[2]);


1.2Àý. ¼³¸í

pipe ¸¦ ÀÌ¿ëÇϸé 2°³ÀÇ ÆÄÀÏ Áö½ÃÀÚ¸¦ »ý¼ºÇÒ¼ö ÀÖ´Ù. 2°³°¡ »ý¼ºµÇ´Â ÀÌÀ¯´Â ÀбâÀü¿ë°ú ¾²±âÀü¿ëÀÇ ÆÄÀÌÇÁ¸¦ »ý¼ºÇϱâ À§ÇÔÀÌ´Ù. filedes[0] Àº Àбâ Àü¿ë, filedes[1] Àº ¾²±âÀü¿ëÀÇ ÆÄÀÌÇÁ·Î »ç¿ëµÈ´Ù.

ÀÌµé ÆÄÀÌÇÁ´Â ÁÖ·Î ºÎ¸ðÇÁ·Î¼¼½º¿Í ÀÚ½ÄÇÁ·Î¼¼½º°£ÀÇ Åë½ÅÀ» À§ÇÑ ¸ñÀûÀ¸·Î »ç¿ëµÈ´Ù.


1.3Àý. ¹Ýȯ°ª

¼º°øÇÒ°æ¿ì 0À» ½ÇÆÐÇßÀ»°æ¿ì¿¡´Â -1À» ¹ÝȯÇϸç, Àû´çÇÑ errno °ªÀ» ¼³Á¤ÇÑ´Ù.


1.4Àý. ¿¡·¯

EMFILE

³Ê¹« ¸¹Àº ÆÄÀÏ µð½ºÅ©¸³ÅͰ¡ ÇÁ·Î¼¼½º¿¡ ÀÇÇØ »ç¿ëµÇ°í ÀÖ´Ù.

ENFILE

½Ã½ºÅÛ ÆÄÀÏ Å×À̺íÀÌ ²ËáÀ»°æ¿ì

EFAULT

filedes °¡ À¯È¿ÇÏÁö ¸øÇÏ´Ù.

ENOBUFS

½Ã½ºÅÛ¿¡ ¿¬»êÀ» À§Çؼ­ ÀÌ¿ëÇÒ¼ö ÀÖ´Â ÀÚ¿øÀÌ ºÎÁ·ÇÒ¶§


1.5Àý. ¿¹Á¦

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>

int main()
{
int n, fd[2];
char buf[255];
int pid;

if (pipe(fd) < 0)
{
perror("pipe error : ");
exit(0);
}

// ÆÄÀÌÇÁ¸¦ »ý¼ºÇÑ´Ù.
if ((pid = fork()) < 0)
{
perror("fork error : ");
exit(0);
}

// ¸¸¾à ÀÚ½ÄÇÁ·Î¼¼½º¶ó¸é ÆÄÀÌÇÁ¿¡ ÀÚ½ÅÀÇ PID Á¤º¸¸¦ ¾´´Ù.
else if (pid == 0)
{
close(fd[0]);
while(1)
{
memset(buf, 0x00, 255);
sprintf(buf, "Hello : %d\n", getpid());
write(fd[1], buf, strlen(buf));
sleep(1);
}
}

// ¸¸¾à ºÎ¸ðÇÁ·Î¼¼½º¶ó¸é ÆÄÀÌÇÁ¿¡¼­ µ¥ÀÌŸ¸¦ ÀоîµéÀδÙ.
else
{
close(fd[1]);
while(1)
{
memset(buf, 0x00, 255);
n = read(fd[0], buf, 255);
fprintf(stderr, "%s", buf);
}
}
}
À§ ÇÁ·Î±×·¥Àº ÆÄÀÌÇÁ¸¦ »ý¼ºÇÑÈÄ ¸¸µé¾îÁø ÆÄÀÌÇÁ¸¦ ÅëÇØ¼­ Àڽİú ºÎ¸ð°¡ ¼­·Î Åë½ÅÇÏ´Â ¿¹Á¦ÀÌ´Ù. fork ÇϱâÀü¿¡ pipe ¸¦ ¸¸µé¸é µÈ´Ù. fork() ´Â Ư¼º»ó ¿­¸°ÆÄÀÏÁö½ÃÀÚ¸¦ ÀڽĿ¡°Ô »ó¼ÓÇϱ⠶§¹®ÀÌ´Ù.

EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.