目前,我正在用C语言实现一个简单的shell作为我的术语项目。我使用fork和exec来执行命令。但是,某些命令必须在内部执行(不允许使用fork和exec)。 我在哪里可以找到shell命令的源代码?
答案 0 :(得分:1)
答案 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.c
,ladsh2.c
下找到完整的来源here,依此类推。