Я использую execvp для выполнения некоторых команд, таких как ls -l, who, cp -r ./aaa ./bbb и т. д. Все в порядке, пока я не попытаюсь выполнить ту же команду во второй раз. Например, я покажу вам порядок, в котором я использую: ls -l (все в порядке), who (все в порядке), ls -l (неверный адрес). Это мой код:
if(strcmp(com_instr, "issuejob") == 0)
{
pid = fork();
if(pid < 0)
{
perror("Fork");
exit(1);
}
else if(pid == 0)
{
sleep(0.1);
//number of args
read(fd, &t_args, sizeof(int));
printf("t_args %d\n",t_args);
commands = malloc(t_args*sizeof(char *));
for(i=0; i<t_args; i++)
{
commands[i] = malloc(SIZE*sizeof(char));
}
for(i=0; i<t_args; i++)
{
read(fd, commands[i], SIZE);
}
//Receiving data from named-pipe
/*temp_run = run_node->next;
while(temp_run != NULL)
{
printf("jjjjjjjjjjjjjjjjjjjj %d",temp_run->job_id);
temp_run = temp_run->next;
}*/
printf("command %s\n", commands[0]);
execvp(commands[0], commands);
perror("execvp");
exit(1);
}
else if(pid > 0)
{
temp_run = run_node;
for(i=0; i<run_num; i++)
{
if(temp_run->next != NULL) temp_run = temp_run->next;
else break;
}
if((i <= run_num-1) && (wait_node->next == NULL))
{
temp_run->next = malloc(sizeof(run_list));
temp_run = temp_run->next;
saving_data_run(temp_run, j_id, line, 1, arg_num-1, pid);
printf("pid:%d\n",temp_run->pid);
++running;
send_data_for_exec(line, arg_num-1, fd);
}
else
{
temp_wait = wait_node;
while(temp_wait->next != NULL) temp_wait = temp_wait->next;
temp_wait->next = malloc(sizeof(wait_list));
saving_data_wait(temp_wait, j_id, line, 0, arg_num-1, pid);
wait_num++;
}
}
j_id++;
}
Я использую именованные каналы для передачи своих аргументов в командах char **. Аргументы правильно передаются командам char **, я проверил это с помощью printf. Есть ли проблема с выполнением одной и той же команды более одного раза в execvp? Заранее спасибо!