Исходный код для команд оболочки в Linux (язык C) - PullRequest
0 голосов
/ 04 июня 2010

В настоящее время я использую простую оболочку на языке C в качестве моего термина project. Я использовал fork и exec для выполнения команд. Тем не менее, некоторые команды должны выполняться внутри (форк и exec запрещены). Где я могу найти исходный код для команд оболочки?

Ответы [ 3 ]

1 голос
/ 04 июня 2010

Это зависит от команды оболочки. Для таких команд, как cd, все, что вы в конечном итоге делаете, вызывает chdir(2).

Но для таких вещей, как переменные оболочки (например, bash var=value), детали будут сильно зависеть от внутренней части вашей реализации.

1 голос
/ 04 июня 2010

Взгляните на Разработка приложений для Linux Майклом К Джонсоном и Эриком В. Троаном

В моей редакции (2-й) вы разрабатываете простую оболочку (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.c, ladsh2.c и т. Д.

1 голос
/ 04 июня 2010

Зависит от того, какую оболочку вы хотите:

баш? ЗШ? CSH

Я бы выбрал что-то меньшее, например оболочку busybox: http://busybox.net/downloads/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...