Я довольно новичок в 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++;
}
}
код должен проверить, что argc (по крайней мере) 3, и если этот тест завершился с ошибкой, выведите сообщение об ошибке, указывающее правильный формат, а затем завершите – user3629249
argc, включите счетчик для имени программы (это имя найдено в argv [0])), поэтому код необходимо изменить, чтобы учитывать эти две детали. – user3629249
А, хорошо. Он проверяет количество аргументов и терпит неудачу, если передано слишком мало, но я удалил эту проверку в интересах сохранения фрагмента кода в точке. – vaindil