永发信息网

编写一个简单的可执行ls ,pwd命令的shell.

答案:2  悬赏:80  手机版
解决时间 2021-03-22 22:17
  • 提问者网友:龅牙恐龙妹
  • 2021-03-22 06:11
编写一个简单的可执行ls ,pwd命令的shell.
最佳答案
  • 五星知识达人网友:纵马山川剑自提
  • 2021-03-22 07:36
写了一个,可以参考下。
楼主可以去看看“linux c编程”方面的书。
#include
#include
#include
#include

#define MAXARG 10
#define LINSIZ 80
#define CMDSIZ 8

extern char **environ;
char *quit = "quit";
char cmdbuf[CMDSIZ][LINSIZ];
int cmdflag[CMDSIZ];

int main ()
{
int i;
for (;;)
{
printf ("mini_SH-->");
for (i = 7; i >= 0; i--)
{
cmdflag[i] = 0;
cmdbuf[i][0] = '\0';
}
if (i = get_next_command ())
docommand (i);
else
printf ("read command failed, try again!!!\n");
}
return 0;
}

int get_next_command ()
{
char c, *p;
int i = 0;

p = cmdbuf[0];
while ((c = getchar ()) != '\n')
{
if (c == ';')
{
*p = '\0';
if (++i == 6)
return (++i);
p = cmdbuf[i];
}
else if (c == '&')
{
cmdflag[i] = 1;
}
else
*p++ = c;
}
*p = '\0';
return (++i);
}

docommand (int i)
{
int j, stat, pid;
char *argl[MAXARG], args[LINSIZ];
char c, *argsp, **arglp, *p;

for (j = 0; j < i; j++)
{
arglp = argl;
argsp = args;
p = cmdbuf[j];
while ((c = *p++) != '\0')
{
while (c == ' ' || c == '\t')
c = *p++;
if (c == '\0')
{
*argsp++ = '\0';
break;
}
*arglp++ = argsp;
while ((c != ' ') && (c != '\t') && (c != '\0'))
{
*argsp++ = c;
c = *p;
if (c)
p++;
}
*argsp++ = '\0';
}
*arglp = (char *) 0;
if (strcmp (argl[0], quit) == 0)
{
printf ("Bye Bye!\n");
exit (0);
}
if ((pid = fork ()) == 0)
{
if (cmdflag[j])
setpgrp ();
if (strcmp (argl[0], "ls") == 0)
{
execve ("/bin/ls", argl, environ);
}
else if (strcmp (argl[0], "pwd") == 0)
{
execve ("/bin/pwd", argl, environ);
}
else
execve (argl[0], argl, environ);
printf ("Returned from execve: %s\n", cmdbuf[i]);
exit (10);
}
else
{
if (!cmdflag[j])
while (wait (&stat) != pid);
}
}
}
全部回答
  • 1楼网友:大漠
  • 2021-03-22 08:04
#!/bin/bash
ls
pwd
误解意思了我。。。
以为是写脚本 :)。追问请问你知道哪本书上有这类型的参考么?我看操作系统那本书 完全不知道该怎么做这作业。。网上也全是脚本的。。。追答像鸟哥的linux私房菜这类linux基础的书籍都是介绍shell脚本的,《Shell高级编程》里应该有讲。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯