【发布时间】:2019-03-25 18:37:02
【问题描述】:
我需要实现一个简单的命令行解释器,能够解释一组内部实现的命令。我尝试使用此代码,但它根本不起作用。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#define MAXIMO 2048
#define BLANCO " "
#define FIN "FIN"
#define MSG_ERROR "ERROR!"
#define PROMPT "\n#@> "
int hayAmpersand(char cadena[]);
int main(int argc, char *argv[]) {
char comando[MAXIMO] = "";
char *palabras[MAXIMO];
int e, i, ampersand;
pid_t hijo, hijoMuerto;
while(1) {
// Vacio las cadenas al inicio de cada bucle
comando[0] = '\0';
ampersand = 0;
printf(PROMPT);
scanf("\n%[^\n]", comando); // Leemos la cadena entera
if (strcmp(comando, FIN) == 0)
return (0); // Si son iguales sale del programa
if (hayAmpersand(comando) == 1)
ampersand = 1;
//== Cadenas
//==========================================================
// Sacamos la primera palabra de la cadena
palabras[0] = strtok(comando, BLANCO);
// Sacamos la otras palabras de la cadena
i = 1;
while ((palabras[i] = strtok(NULL, BLANCO)) != NULL)
i++;
//== Fin Cadenas
//======================================================
hijo = fork();
switch (hijo) {
case -1:
perror(MSG_ERROR);
exit(-1);
case 0:
execvp(palabras[0], &palabras[0]);
perror(MSG_ERROR);
exit(e);
default:
if (ampersand != 1) {
hijoMuerto = 0;
while ((hijo != hijoMuerto) && (hijoMuerto != -1))
hijoMuerto = wait(&e);
}
}
}
return (0);
}
int hayAmpersand(char cadena[]) {
int j = 0;
for (j = 0; j <= strlen(cadena); j++) {
if (cadena[j] == '&') {
cadena[j] = cadena[j + 1];
return(1);
}
}
return (0);
}
这是练习: http://ciprianpungila.com/uvt/so2018/projects/35.txt
或多或少可行,但练习需要实现键盘箭头,我不知道如何在我的代码中做到这一点,如果有人可以帮助我,我将非常感激
【问题讨论】:
-
你可以使用
readline吗? -
简单的谷歌搜索
c programming reading arrow keys给出了足够的答案。 -
如果您可以更具体一些,这将对您的问题有所帮助,例如如何捕获箭头键,或者,如果您已经捕获它们,如何移动光标?现在,您的问题基本上是请人为您完成作业。
-
@jesusbedoya:您可以通过点击分数下方的灰色复选标记来接受其中一个答案。