Com принять команду
void pcreate(char* com, int* fdin_, int* fdout_)
{
pid_t pid;
int pipe_in[2];
int pipe_out[2];
pipe(pipe_in);
pipe(pipe_out);
pid = fork();
if (pid > 0)
{
close(pipe_in[0]);
close(pipe_out[1]);
*fdin_ = dup(pipe_in[1]);
*fdout_ = dup(pipe_out[0]);
}
else if (pid == 0 )
{
close(pipe_in[1]);
close(pipe_out[0]);
dup2(pipe_in[0], 0);
dup2(pipe_out[1], 1);
int size = 2;
int comlenght = (int)strlen(com);
for (int i = 0; i < comlenght; i++)
{
if (com[i] == ' ')
size++;
}
char* args[size];
comparse(com, args, size);
if (execvp(args[0], args) < 0)
_exit(0);
}
}
void comparse(char* com, char* args[], int comlenght)
{
long del = 0;
char *com1 = com;
char *com2 = com1;
for (int i = 0; i < comlenght - 1; i++)
{
com2 = strstr(com1, " ");
if (com2 == NULL)
del = (long)strlen(com1);
else
del = com2 - com1;
args[i] = malloc((unsigned)(del+1) * sizeof (char));
args[i][del] = '\0';
strncpy(args[i], com1, (unsigned)del);
com1 = com2 + 1;
}
args[comlenght - 1] = NULL;
}