Я новичок в C, поэтому прошу прощения, если это простой вопрос. Я пишу программу на C, часть которой приведена ниже. Целью всей программы является копирование файла из одного места в другое (файлы передаются в качестве аргументов, а последний аргумент является местом назначения). main()
, приведенный ниже, использует fork()
для создания одного дочернего процесса для каждого переданного файла, и мне нужно распечатать имя файла (только входной аргумент) вместе с сообщением, которое может включать PID для каждой попытки копирования после запуска всех дочерних процессов. .
Очевидно, что я могу получить и использовать PID, это не проблема, но как я могу получить правильное имя файла/аргумент, связанный с этим процессом? Метод, который у меня сейчас есть, явно неверен; простое повторение каждого аргумента по порядку будет неправильным. Это будет работать на Minix 2.0.4, но я не знаю, имеет ли это значение.
int
main(int argc, char *argv[])
{
int i, pid, rem, status;
int pids[argc];
char cfstatus[];
rem = argc;
for(i = 1; i < argc; i++) {
if((pids[i] = fork()) < 0) {
fprintf(stderr, "Error while forking");
}
else if(pids[i] == 0) {
if(copyfile(argv[i], argv[argc - 1]) == 1)
exit(4);
else
exit(0);
}
}
i = 0;
while(rem > 1) {
pid = wait(&status);
cfstatus = getcfstatus(status, pid);
printf("%-20s: %s", argv[i], cfstatus);
rem--;
i++;
}
}