SYSTEM

Section: ¸®´ª½º ÇÁ·Î±×·¡¸Ó ¸Å´º¾ó (3)
Updated: 1998³â 5¿ù 11ÀÏ
Index
Return to Main Contents
 

À̸§

system - shell ¸í·É¾î ½ÇÇàÇÏ±â  

»ç¿ë¹ý

#include <stdlib.h>

int system (const char * string);
 

¼³¸í

system() ÇÔ¼ö´Â /bin/sh -c string¸¦ È£ÃâÇÏ¿© string ¿¡ ÁöÁ¤µÈ ¸í·É¾î¸¦ ½ÇÇàÇϸç, ¸í·É¾î°¡ ³¡³­ÈÄ ¹ÝȯµÈ´Ù. ¸í·É¾î°¡ ½ÇÇàµÇ´Â µ¿¾È, SIGCHLD ´Â ºí·°µÇ¸ç, SIGINT ±×¸®°í SIGQUIT ´Â ¹«½ÃµÈ´Ù.  

¹Ýȯ°ª

¸®ÅÏµÈ °ªÀº ¸¸ÀÏ /bin/sh À» À§ÇÑ execve() È£ÃâÀÌ ½ÇÆÐÇÑ´Ù¸é, ¸®ÅÏµÈ °ªÀº 127 À̸ç, ´Ù¸¥ ¿¡·¯°¡ ÀÖ´Ù¸é -1, ±×·¸Áö ¾ÊÀ¸¸é ¸í·É¾îÀÇ ¸®ÅÏÄڵ尡 ¹ÝȯµÈ´Ù.

string °ªÀÌ NULLÀ̶ó¸é, system() Àº shellÀ» ÀÌ¿ëÇÒ¼ö ÀÖ´Ù¸é 0 ÀÌ ¾Æ´Ñ °ªÀ», ±×·¸Áö ¾ÊÀ¸¸é 0 °ªÀ» ¹ÝȯÇÑ´Ù.

system() Àº ¾î¶² ´Ù¸¥ ÀÚ½ÄÀÇ wait »óÅ¿¡ ¿µÇâÀ» ÁÖÁö ¾Ê´Â´Ù.  

ȣȯ

ANSI C, POSIX.2, BSD 4.3  

¹ö±×

libc ¹öÀüÀÇ system() ÀÌ ÀÎÅÍ·´Æ®¸¦ ¹«½ÃÇÑ´Ù´Â °ÍÀº ¸Å¿ì ºÒÇàÇÑ ÀÏÀÌ´Ù. ÀÌ°ÍÀº ÇÔ¼ö ÈÄÃâ½Ã ·çÇÁ¿¡¼­ ÀÎÅÍ·´Æ®ÇÒ¼ö ¾ø°Ô µÇµµ·Ï ÇÁ·Î±×·¥À» ¸¸µç´Ù. ÀÌ°ÍÀº ±×·± ¸ñÀûÀÇ ÇÁ·Î±×·¥Àº system() ÀÌ ¾Æ´Ñ °³ÀÎ ¹öÀüÀÇ ÇÔ¼ö¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.(°æ°í: Å×½ºÆ®µÈ Äڵ尡 ¾Æ´Ï´Ù!)


int my_system (const char *command) {
    int pid, status;

    if (command == 0)
        return 1;
    pid = fork();
    if (pid == -1)
        return -1;
    if (pid == 0) {
        char *argv[4];
        argv[0] = "sh";
        argv[1] = "-c";
        argv[2] = command;
        argv[3] = 0;
        execve("/bin/sh", argv, environ);
        exit(127);
    }
    do {
        if (waitpid(pid, &status, 0) == -1) {
            if (errno != EINTR)
                return -1;
        } else
            return status;
    } while(1);
}

suid ³ª sgid ¿ì¼±±ÇÀÌ ÀÖ´Â ÇÁ·Î±×·¥¿¡¼­´Â system() À» »ç¿ëÇÏÁö ¸¶¶ó. ¿Ö³ÄÇÏ¸é ¸î¸î ȯ°æ º¯¼öµéÀ» À§ÇÑ ÀÌ»óÇÑ °ªµéÀÌ ½Ã½ºÅÛÀ» ¿ÀÀÛµ¿½Ãų¼ö Àֱ⠶§¹®ÀÌ´Ù. ´ë½Å¿¡ exec(3) °è¿­ÀÇ ÇÔ¼ö¸¦ »ç¿ëÇضó. ±×·¯³ª execlp(3) ³ª execvp(3)Àº Á¦¿ÜÇضó. »ç½Ç system() ÇÔ¼ö´Â /bin/sh ÀÌ bash ¹öÀü 2ÀÎ ½Ã½ºÅÛ¿¡¼­ suid ³ª sgid ¿ì¼±±ÇÀÌ ÀÖ´Â ÇÁ·Î±×·¥¿¡¼­´Â Àß ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù. ¿Ö³ÄÇϸé bash 2´Â ½ÃÀ۽à ¿ì¼±±ÇÀ» ¾ø¾Ö±â ¶§¹®ÀÌ´Ù. (DebianÀº shó·³ ±¸µ¿½Ã ÀÌ°ÍÀ» ÇÏÁö ¾Ê´Â ¼öÁ¤µÈ bash¸¦ »ç¿ëÇÑ´Ù.)

/bin/sh ÀÇ À¯¿ë¼º °Ë»ç´Â ½ÇÁ¦ÀûÀ¸·Î´Â ÇàÇØÁöÁö ¾Ê´Â´Ù; Ç×»ó À¯È¿ÇÏ´Ù°í °¡Á¤ÇÑ´Ù. ISO C´Â °Ë»ç¸¦ ÁöÁ¤ÇÏÁö¸¸, POSIX.2´Â ¸®ÅÏ °ªÀº Ç×»ó 0 ÀÌ ¾Æ´Ñ °ªÀ̾î¾ß ÇÑ´Ù°í ÁöÁ¤ÇÑ´Ù. ¿Ö³ÄÇϸé shellÀÌ ¾ø´Â ½Ã½ºÅÛÀº ÇàÇØÁ®¼­´Â ¾ÈµÇ±â ¶§¹®ÀÌ´Ù.

¹Ýȯ °ª 127Àº shell ¸í·É¾î¿¡¼­ °¡´ÉÇÏ´Ù. ±×·¯¹Ç·Î ÀÌ ¹Ýȯ °ªÀº execve() °¡ ½ÇÆÐÇߴٴ°ÍÀ» È®½ÇÈ÷ °¡¸®Å°Áö ¾Ê´Â´Ù; È®½ÅÀ» À§ÇØ errno ¸¦ °Ë»çÇضó.  

°ü·Ã Ç׸ñ

sh(1), signal(2), exec(3)  

¿ªÀÚ

Á¤°­ÈÆ <skyeyes@soback.kornet.net>, 2001³â 3¿ù 12ÀÏ


 

Index

À̸§
»ç¿ë¹ý
¼³¸í
¹Ýȯ°ª
ȣȯ
¹ö±×
°ü·Ã Ç׸ñ
¿ªÀÚ

This document was created by man2html, using the manual pages.
Time: 08:07:01 GMT, March 25, 2004