J'écris un shell linux pour mon système d'exploitation classe. J'ai éliminé la majorité, mais je suis coincé sur de simples comparaisons de chaînes. J'ai tout ce que je peux penser. strcmp devrait prendre dans \ 0 les chaînes terminées et retourner 0 pour égal mais cela ne semble pas fonctionner et même marcher dans le tableau et vérifier chaque char ne fonctionne pas non plus. J'ai actuellement cmd [0] dans le strcmp je sais que ce n'est pas juste qu'il doit être terminé par zéro, mais j'ai essayé d'utiliser strcpy et strcat \ 0 à une autre chaîne. Si quelqu'un pouvait signaler mon erreur, ce serait très apprécié.tableaux de caractères, et comment utiliser des pointeurs strtok et STRCMP
//Matthew Spiers
//CSC306
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <iostream>
#include <unistd.h>
#include <stdlib.h>
using namespace std;
void ckCmd(char dir[]);
int main(){
pid_t pid;
char cdstr[4] = "cd";
char str[50];
char *cmd[3];
char *pstr;
char temp[50];
char dir[50] = "/bin/";
while(1){
pid = fork();
if(pid < 0){
fprintf(stdout, "Fork Failed");
}
else if(pid == 0){
fprintf(stdout, "\e[36m306.SH>\e[0m");
fgets(str, 50, stdin);
for(int i =0; i<50; i++){
if(str[i] == '\n'){
str[i] = '\0';
}
}
strcpy(temp, str); // Make a copy of original string
cmd[0] = strtok(str, " ");
for(int i =1; i<3; i++){
cmd[i] = strtok(NULL, " ");
}
strcat(dir, cmd[0]);
cout << cmd[0];
pstr = strtok(temp, " "); //pull out only first token
//Change Directory
if(!strcmp(pstr, "cd")){ //if first token is cd
//either branch to a routine just change directory
//ie branch and change directory
}
//ckCmd(temp);
execlp(dir, cmd[0], cmd[1], cmd[2], NULL);
_exit(0);
}
else{
wait(NULL);
}
}
}
void ckCmd(char str[]){
char *p;
p = strtok(str, " ");
if(p[0] == 'c'){
chdir("new");
}
}
enter code here
Même si les fonctions dont vous parlez sont pures C, l'inclusion indique que vous utilisez C++, j'ai donc retiré l'étiquette, retag si vous le jugez approprié. Une fois que vous allez utiliser C++, je vous conseille d'utiliser 'std :: string' et d'éviter d'utiliser' strtok' et 'strcmp', sauf si cela fait partie des exigences de l'exercice. –
Balise modifiée de C++ à C – Nikko
[EDIT] Surligné une ligne, passons. – jv42