如何解决如何在实现Shell的程序中传递参数值
来源::
#include <stdio.h> // printf()
#include <stdlib.h> // exit()
#include <string.h> // string
#include <dirent.h> // microsoft base compiler. _chdir,_getcwd
#include <unistd.h> // unix base complier. getcwd,chdir
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#define FILE_SIZE 1024
#define MAX 255
#define ERROR (-1)
void cmd_mkdir(int argc,char *argv);
void cmd_ls()
{
char * cwd = (char *)malloc(sizeof(char) * 1024);
DIR * dir = NULL;
struct dirent * entry = NULL;
getcwd(cwd,1024);
if( (dir = opendir(cwd)) == NULL)
{
printf("current directory error\n");
exit(1);
}
while( (entry = readdir(dir)) != NULL)
{
printf("%s\n",entry->d_name);
}
free(cwd);
closedir(dir);
}
void cmd_pwd() {
char buf[MAX];
getcwd(buf,MAX);
printf("%s\n",buf);
}
int main(int argc,char *argv[])
{
char cBuf[MAX];
char *arg;
while(1) {
printf(">> ");
arg = fgets(cBuf,MAX,stdin);
if(argc < 2){
// printf("1111\n"); -- check
if(strncmp(arg,"ls",2) == 0)
cmd_ls();
else if(strncmp(arg,"pwd",3) == 0)
cmd_pwd();
else if(strncmp(arg,"exit",4) == 0)
break;
} // if END
else {
// printf("2222\n"); -- check
if(strcmp(arg,"mkdir") == 0){
if (argc != 2)
fprintf(stderr,"Usage : jmkdir dirname\n");
if(mkdir(argv[1],0755))
perror("mkdir error");
}
}// else END
} // while END
} // main END
期望的结果::
执行mkdir
(实现shell的可执行文件)后如何获取两个输入值(mini_maked
,./minishell
)作为参数
$ ./minishell
>> mkdir mini_maked
当前实现的ls,pwd,exit
可以实现,因为它可以不带任何选项地使用,但是没有实现需要“命令文件名”的命令,例如mkdir
。
如果程序本身以mkdir
的形式运行,则使用 argc 和 argv 的值来解决。
但是,由于./myshell
程序本身实现了 shell 程序,因此,当您运行该程序并收到mkdir mini_maked
作为输入时,您将很难执行命令。
如果程序执行后得到两个输入(mkdir
,mini_maked
),我们如何将它们作为参数?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。