Привет, я пытаюсь создать оболочку с использованием execv и fork, но у меня возникли проблемы с функциями, которые я создал. В значительной степени программа должна работать как оболочка, позволяя простые команды на переднем плане и в фоновом режиме. Итак, теперь я исправил большинство упомянутых ошибок, и теперь я остаюсь с двумя ошибками на ptr [args] = NULL; где он говорит, что присваивание делает целое число из указателя без приведения, а вторая ошибка - strcat, где он говорит недопустимый тип аргумента «unary *» (имеет «int»). Пожалуйста, помогите, я не знаю, как их исправить.Создание ложной оболочки UNIX
int argCount(char *numofArgs){
int count = 0, index = 0;
for(count; numofArgs[index] != '\0'; index++){
if(numofArgs[index] == ' ' || (numofArgs[index] == ' ' && numofArgs[index+1] == ' ')){
count++;
}
}
count++;
}
void parse(char *str, int numOfArgs, char* args){
char *token1;
const char s[1] = " ";
//gets first token
token1 = strtok(str, s);
while(token1 != NULL){
token1 = strtok(NULL, s);
}
}
int main(int argc, char **argv[]){
//holds commands
char hcomm[512];
char *path = "/bin", *ptrarr;
char dummy[512];
int args, exe;
while(1){
printf("dummy>");
fgets(hcomm, 512, stdin);
int pid = fork();
if(pid != 0){
wait(NULL);
}
else{
//child if pid = 0
//args = counts number of args
args = argCount(hcomm);
//array of pointers for args to passed into
ptrarr[args + 1];
//need to parse the input and arguments
parse(hcomm, args, ptrarr);
//set last pointer to NULL
ptrarr[args] = NULL;
strcpy(dummy, path);
//concat dummy to /bin/
strcat(dummy, *ptrarr[0]);
//pass to exe
exe = execv(dummy, ptrarr);
}
}
return 0;
}
"Bash" является большим (почти) надмножеством POSIX ш. Это не пытается быть bash. Он даже не пытается быть POSIX sh. Он даже не пытается стать борзой 1970-х годов. Пожалуйста, не помещайте что-либо «bash», если оно не связано с bash; лучший тег для этого будет просто «оболочкой», поскольку это вопрос оболочки. –
Также, как правило, для сообщения _any_ в StackOverflow, попробуйте уменьшить до наименьшего возможного фрагмента кода, который будет воспроизводить заданную проблему перед публикацией. См. Также http://stackoverflow.com/help/mcve –
Неплохо, я довольно новичок в Stack, поэтому я все еще привыкаю к этому. Спасибо за ваш вклад. – MoistyTacos