linux中shell命令的源代码(C语言)

时间:2010-06-03 22:06:22

标签: linux shell

目前,我正在用C语言实现一个简单的shell作为我的术语项目。我使用fork和exec来执行命令。但是,某些命令必须在内部执行(不允许使用fork和exec)。 我在哪里可以找到shell命令的源代码?

3 个答案:

答案 0 :(得分:1)

取决于您想要的shell:

的bash? zsh的? CSH?

我会选择像busybox shell那样小的东西:http://busybox.net/downloads/

答案 1 :(得分:1)

这取决于shell命令。对于像cd这样的命令,您最终要做的就是调用chdir(2)

但是对于像shell变量这样的东西(即bash的var=value),细节将在很大程度上取决于你实现的内部。

答案 2 :(得分:1)

Linux Application Development by Michael K Johnson and Erik W. Troan

处采取行动

在我的版本(第2版)中,您开发了一个简单的shell(ladsh)作为管道和流程处理中的一些示例(在10.7中)的一部分。一个伟大的教育资源

证明对我非常有用。

摘录:

struct childProgram {
    pid_t pid;              /* 0 if exited */
    char ** argv;           /* program name and arguments */
};

struct job {
    int jobId;              /* job number */
    int numProgs;           /* total number of programs in job */
    int runningProgs;       /* number of programs running */
    char * text;            /* name of job */
    char * cmdBuf;          /* buffer various argv's point into */
    pid_t pgrp;             /* process group ID for the job */
    struct childProgram * progs; /* array of programs in job */
    struct job * next;      /* to track background commands */
};

void freeJob(struct job * cmd) {
    int i;

    for (i = 0; i < cmd->numProgs; i++) {
        free(cmd->progs[i].argv);
    }
    free(cmd->progs);
    if (cmd->text) free(cmd->text);
    free(cmd->cmdBuf);
}

您可以在ladsh1.cladsh2.c下找到完整的来源here,依此类推。