Моя программа должна принимать данные из терминала и выполнять команду
например: "ls" или "ls -l | wc"
{...}
//Split the command and store each string in parameter[]
parameter[0] = malloc(255); //Allocate some space to the first element in the array
cp = strtok(command, " "); //Get the initial string (the command)
strncpy(parameter[0], cp, 50);
for(i = 1; i < MAX_ARG; i++)
{
parameter[i] = malloc(255);
cp = strtok(NULL, " "); //Check for each string in the array
parameter[i] = cp; //Store the result string in an indexed off array
if(strcmp(parameter[i], "|") == 0)
{
i = MAX_ARG;
cp = strtok(NULL, " ");
parameter2[0] = malloc(255);
strncpy(parameter2[0], cp, 50);
break;
}
if(parameter[i] == NULL)
{
break;
}
}
//Find the second set of commands and parameter
//strncpy(parameter2[0], cp, 50);
for (j = 1; j < MAX_ARG; j++)
{
parameter2[j] = malloc(255);
cp = strtok(NULL, " ");
parameter2[j] = cp;
}
{...} // Это выполнение части команды и параметра:
if (proc1 == 0)
{
close(fd[0]); //process1 doenst need to read from pipe
close(STD_INPUT); //prepare for output
dup(fd[1]); //Standard output = fd[1]
close(fd[1]);
execvp(parameter[0], parameter); //Execute the process
}
else {
if (proc2 == 0)
{
close(fd[1]);
close(STD_OUTPUT);
dup(fd[0]);
close(fd[0]);
execvp(parameter2[0], parameter2);
}
//Parent process
else
{
waitpid(-1, &status, 0); //Wait for the child to be done
}
}
Я не уверен, что делаю неправильно, потому что, когда я ввожу "ls -l | wc", я получаю сообщение "| not found in directory"