exec

Autres langues

Langue: ja

Version: 1993-11-29 (openSuse - 09/10/07)

Section: 3 (Bibliothèques de fonctions)

̾Á°

execl, execlp, execle, execv, execvp - ¥Õ¥¡¥¤¥ë¤ò¼Â¹Ô¤¹¤ë

½ñ¼°

#include <unistd.h>

extern char **environ;

int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg,
..., char * const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);

ÀâÌÀ

exec() ¥Õ¥¡¥ß¥ê¡¼¤Î´Ø¿ô¤Ï¸½ºß¤Î¥×¥í¥»¥¹¥¤¥á¡¼¥¸¤ò¿·¤·¤¤¥×¥í¥»¥¹¥¤¥á¡¼¥¸¤ÇÃÖ¤­ ´¹¤¨¤ë¡£¤³¤Î¥Þ¥Ë¥å¥¢¥ë¤ÇÀâÌÀ¤µ¤ì¤Æ¤¤¤ë´Ø¿ô¤Ï execve(2) ¤Î¥Õ¥í¥ó¥È¥¨¥ó¥É¤Ç¤¢¤ë¡£ (¸½ºß¤Î¥×¥í¥»¥¹¤ÎÃÖ¤­´¹¤¨¤Ë¤Ä¤¤¤Æ¤Î¾ÜºÙ¤Ï execve(2) ¤Î¥Þ¥Ë¥å¥¢¥ë¤ò»²¾È)

¤³¤ì¤é¤Î´Ø¿ô¤ÎºÇ½é¤Î°ú¤­¿ô¤Ï¡¢¼Â¹Ô¤µ¤ì¤ë¥Õ¥¡¥¤¥ë¤Î¥Ñ¥¹Ì¾¤Ç¤¢¤ë¡£

´Ø¿ô execl(), execlp(), execle() ¤Î const char *arg ¤È¤½¤ì¤Ë³¤¯¾ÊάÉôʬ¤Ï arg0, arg1, ..., argn ¤È¤ß¤Ê¤µ¤ì¤ë¡£ ¤³¤ì¤é¤Ë¤Ï¡¢¼Â¹Ô¤µ¤ì¤ë¥×¥í¥°¥é¥à¤ÇÍøÍѲÄǽ¤Ê°ú¤­¿ô¤Î¥ê¥¹¥È¤ò»ØÄꤹ¤ë (°ú¤­¿ô¤Î¥ê¥¹¥È¤Ï NULL ¤Ç½ªÃ¼¤µ¤ì¤¿Ê¸»úÎó¤Ø¤Î¥Ý¥¤¥ó¥¿¤«¤é¹½À®¤µ¤ì¤ë)¡£ ´·½¬¤È¤·¤Æ¡¢ºÇ½é¤Î°ú¤­¿ô¤Ï¡¢¼Â¹Ô¤µ¤ì¤ë¥Õ¥¡¥¤¥ë̾ ¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ë¤¹¤ë¡£°ú¤­¿ô¤Î¥ê¥¹¥È¤Ïɬ¤º NULL ¤Ç½ª¤ï¤é¤Ê¤±¤ì¤Ð¤Ê¤é¤º¡¢¤³¤ì¤é¤Î´Ø¿ô¤Ï²ÄÊÑĹ°ú¤­¿ô´Ø¿ô¤Ê¤Î¤Ç¡¢ ¤³¤Î¥Ý¥¤¥ó¥¿¤Ï (char *) NULL ¤È¥­¥ã¥¹¥È¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£

´Ø¿ô execv() ¤È execvp() ¤Ï¡¢ÍøÍѲÄǽ¤Ê°ú¤­¿ô¥ê¥¹¥È (NULL ¤Ç½ªÃ¼¤µ¤ì¤¿Ê¸»úÎó¤Ø¤Î ¥Ý¥¤¥ó¥¿¤ÎÇÛÎó) ¤ò¿·¤·¤¤¥×¥í¥°¥é¥à¤ËÅϤ¹¡£ ´·½¬¤È¤·¤Æ¡¢ºÇ½é¤Î°ú¤­¿ô¤Ï¼Â¹Ô¤µ¤ì¤ë¥Õ¥¡¥¤¥ë̾¤Ø ¤Î¥Ý¥¤¥ó¥¿¤Ë¤¹¤ë¡£¥Ý¥¤¥ó¥¿¤ÎÇÛÎó¤Ïɬ¤º NULL ¤Ç½ª¤ï¤é¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£

´Ø¿ô execle() ¤Ç¤Ï¿·¤·¤¤¥×¥í¥»¥¹¤Î´Ä¶­¤â»ØÄꤹ¤ë¡£ ´Ä¶­¤Ï°ú¤­¿ô¥ê¥¹¥È (¥Ñ¥é¥á¡¼¥¿¥ê¥¹¥È¤â¤·¤¯¤ÏÄɲäΥѥé¥á¡¼¥¿ ¤ò»ý¤Ã¤¿ argv ÇÛÎó¤Ø¤Î¥Ý¥¤¥ó¥¿) ¤ÎºÇ¸å¤Î NULL ¥Ý¥¤¥ó¥¿¤Ë³¤±¤Æ»ØÄꤹ¤ë¡£ ÄɲäΥѥé¥á¡¼¥¿¤Ï¡¢ NULL ¤Ç½ªÃ¼¤µ¤ì¤¿Ê¸»úÎó¤Ø¤Î¥Ý¥¤¥ó¥¿¤ÎÇÛÎó¤Ç¤¢¤ê¡¢ NULL ¥Ý¥¤¥ó¥¿¤Ç½ª¤ï¤é¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ ¾¤Î´Ø¿ô¤Ç¤Ï¡¢¸½ºß¤Î¥×¥í¥»¥¹¤Î³°ÉôÊÑ¿ô environ ¤«¤é¿·¤·¤¤¥×¥í¥»¥¹ÍѤδĶ­¤òÍ¿¤¨¤ë¡£

execlp() ¤È execvp() ¤ÎÆÃÊ̤ÊÆ°ºî

´Ø¿ô execlp() ¤È execvp() ¤Ï¡¢»ØÄꤵ¤ì¤¿¥Õ¥¡¥¤¥ë̾¤¬¥¹¥é¥Ã¥·¥å (/) ¤ò´Þ¤ó¤Ç¤¤¤Ê¤¤¾ì¹ç¡¢ ¥·¥§¥ë¤ÈƱ¤¸Æ°ºî¤Ç¼Â¹Ô²Äǽ¤Ê¥Õ¥¡¥¤¥ë¤òõº÷¤¹¤ë¡£ ¸¡º÷¥Ñ¥¹¤Ï´Ä¶­ÊÑ¿ô PATH ¤Ç»ØÄꤵ¤ì¤¿¥Ñ¥¹¤Ç¤¢¤ë¡£ ¤³¤ÎÊÑ¿ô¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢¥Ç¥Õ¥©¥ë¥ÈPATH¤È¤·¤Æ ``:/bin:/usr/bin'' ¤¬»ÈÍѤµ¤ì¤ë¡£ ¤Þ¤¿¡¢¤¤¤¯¤Ä¤«¤Î¥¨¥é¡¼¤¬È¯À¸¤·¤¿¾ì¹ç¤Î°·¤¤¤¬Æüì¤Ç¤¢¤ë¡£

¤â¤·¥Õ¥¡¥¤¥ë¤¬¼Â¹Ô¥Õ¥¡¥¤¥ë¤Ç¤Ê¤¤¾ì¹ç (¤³¤Î¤È¤­¸Æ¤Ó½Ð¤½¤¦¤È¤·¤¿ execve(2) ¤Ï EACCES ¤òÊÖ¤¹)¡¢¤³¤ì¤é¤Î´Ø¿ô¤Ï»Ä¤ê¤Î¸¡º÷¥Ñ¥¹¤Î¸¡º÷¤ò³¤±¤ë¡£ ¾¤Ë¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤é¤Ê¤¯¤Ê¤Ã¤¿¾ì¹ç¥°¥í¡¼¥Ð¥ëÊÑ¿ô errno ¤Ë EACCES ¤òÀßÄꤷÉüµ¢¤¹¤ë¡£

¥Õ¥¡¥¤¥ë¤Î¥Ø¥Ã¥À¤¬¼Â¹Ô·Á¼°¤È¤·¤Æǧ¼±¤Ç¤­¤Ê¤¤¾ì¹ç (¤³¤Î¤È¤­¸Æ¤Ó½Ð¤½¤¦¤È¤·¤¿ execve(2) ¤Ï ENOEXEC ¤òÊÖ¤¹)¡¢¤³¤ì¤é¤Î´Ø¿ô¤Ï¤½¤Î¥Õ¥¡¥¤¥ë¤òºÇ½é¤Î°ú¤­¿ô¤È¤·¤¿¥·¥§¥ë (/bin/sh) ¤ò¼Â¹Ô¤¹¤ë (¤³¤ì¤Ë¤â¼ºÇÔ¤·¤¿¾ì¹ç¡¢¤³¤ì°Ê¾å¤Î¸¡º÷¤Ï¹Ô¤ï¤ì¤Ê¤¤)¡£

ÊÖ¤êÃÍ

¤â¤· exec() ¥Õ¥¡¥ß¥ê¡¼¤¬Éüµ¢¤·¤Æ¤­¤¿¾ì¹ç¡¢¥¨¥é¡¼¤¬È¯À¸¤·¤Æ¤¤¤ë¡£ ÊÖ¤êÃÍ¤Ï -1 ¤Ç¡¢Âç°èÊÑ¿ô errno ¤Ë¤½¤Î¥¨¥é¡¼¤ÎÆâÍƤ¬¥»¥Ã¥È¤µ¤ì¤ë¡£

¥¨¥é¡¼

¤³¤ì¤éÁ´¤Æ¤Î´Ø¿ô¤Ï¼ºÇÔ¤¹¤ë¾ì¹ç¤¬¤¢¤ë¡£¤½¤Î¾ì¹ç¥é¥¤¥Ö¥é¥ê´Ø¿ô execve(2) ¤Ë¤è¤Ã¤Æ»ØÄꤵ¤ì¤¿¥¨¥é¡¼¤ò errno ¤ËÀßÄꤹ¤ë¡£

½àµò

POSIX.1-2001.

Ãí°Õ

Linux °Ê³°¤Î¥·¥¹¥Æ¥à¤Ë¤Ï¡¢ (´Ä¶­ÊÑ¿ô PATH ¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¤È¤­¤Î) ¥Ç¥Õ¥©¥ë¥È¤Î¥Ñ¥¹¤Ë¤ª¤¤¤Æ¡¢¥«¥ì¥ó¥È¡¦¥Ç¥£¥ì¥¯¥È¥ê¤¬ /bin ¤È /usr/bin ¤Î¸å¤í¤ËÇÛÃÖ¤µ¤ì¤ë¤â¤Î¤â¤¢¤ë¡£ ¤³¤ì¤Ï¥È¥í¥¤¤ÎÌÚÇÏÂкö¤Î¤¿¤á¤Ç¤¢¤ë¡£ Linux ¤Ç¤Ï¡¢¥Ç¥Õ¥©¥ë¥È¤Î¥Ñ¥¹¤Ë¡¢ÀΤʤ¬¤é¤Î¡Ö¸½ºß¤Î¥Ç¥£¥ì¥¯¥È¥ê¤ò Àè¤Ëõº÷¡×¤È¤¤¤¦¥ë¡¼¥ë¤ò»È¤Ã¤Æ¤¤¤ë¡£

¥Õ¥¡¥¤¥ë¤ò¼Â¹Ô¤·¤è¤¦¤È¤·¤Æ¤¤¤ë´Ö¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤¿»þ¤Î execlp() ¤È execvp() ¤Î¤Õ¤ë¤Þ¤¤¤Ë¤Ä¤¤¤ÆÎò»ËŪ¤Ê´·½¬¤Ï¤¢¤ë¤¬¡¢ÅÁÅýŪ¤Ëʸ½ñ¤È¤·¤Æµ­ºÜ¤µ¤ì¤Æ¤ª¤é¤º¡¢ POSIX ɸ½à¤Ç¤âµ¬Äꤵ¤ì¤Æ¤¤¤Ê¤¤¡£BSD (¤Þ¤¿¤ª¤½¤é¤¯Â¾¤Î¥·¥¹¥Æ¥à) ¤Ç¤Ï¡¢ ETXTBSY ¤¬È¯À¸¤·¤¿¾ì¹ç¡¢¼«Æ°Åª¤ËÃæÃÇ (sleep) ¤·ºÆ»î¹Ô¤ò¹Ô¤¦¡£ Linux ¤Ï¤½¤ì¤ò¥Ï¡¼¥É¥¨¥é¡¼¤È¤·¤Æ¼è¤ê°·¤¤Â¨ºÂ¤ËÉüµ¢¤¹¤ë¡£

ÅÁÅýŪ¤Ë¡¢´Ø¿ô execlp() ¤È execvp() ¤Ï¡¢¾å¤ÇÀâÌÀ¤·¤¿¥¨¥é¡¼¤È¡¢¤³¤ì¤é 2 ¤Ä¤Î´Ø¿ô¼«¿È¤¬ÊÖ¤¹ ENOMEM ¤È E2BIG °Ê³°¤ÎÁ´¤Æ¤Î¥¨¥é¡¼¤ò̵»ë¤·¤Æ¤¤¤¿¤¬¡¢ º£¤Ç¤Ï¡¢¾å¤ÇÀâÌÀ¤·¤¿°Ê³°¤Î¥¨¥é¡¼¤¬È¯À¸¤·¤¿¾ì¹ç¤Ç¤â¡¢ Ê֤äƤ¯¤ë¤è¤¦Êѹ¹¤µ¤ì¤¿¡£

´ØÏ¢¹àÌÜ

sh(1), execve(2), fork(2), ptrace(2), fexecve(3), environ(7)