用标准C实现shell功能(转)[@more@]
#include
#include
#include
#include
#include
#include
#define SHELL_NAME "sh1"
#define PROMPT_ENVIRONMENT_VARIABLE "PROMPT"
char *prompt;
int main(int argc, char **argv)
{
char cmd[80];
int statval;
/* Determine prompt value. */
if ((prompt = getenv(PROMPT_ENVIRONMENT_VARIABLE)) == NULL)
prompt = SHELL_NAME ":";
/* Process commands until exit, or death by signal. */
while (1)
{
/* Prompt and read a command. */
printf(prompt);
gets(cmd);
/* Process built-in commands. */
if(strcasecmp(cmd, "exit") == 0)
break;
/* Process non-built-in commands. */
if(fork() == 0) {
execlp(cmd, cmd, NULL);
fprintf(stderr, "%s: Exec %s failed: %s ", argv[0],
cmd, strerror(errno));
exit(1);
}
wait(&statval);
if(WIFEXITED(statval))
{
if(WEXITSTATUS(statval))
{
fprintf(stderr,
"%s: child exited with status %d. ",
argv[0], WEXITSTATUS(statval));
}
} else {
fprintf(stderr, "%s: child died unexpectedly. ",
argv[0]);
}
}
}
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8225414/viewspace-944582/,如需转载,请注明出处,否则将追究法律责任。