Я пытаюсь вычислить контрольную сумму каждого двоичного файла в текущем каталоге, используя отдельный процесс для повышения производительности. Однако по какой-то причине мой вывод всегда неожиданный.
Как мне создать отдельный процесс для каждого файла? Должен ли я выполнять весь процесс разветвления в пределах while(pids[i] != -1)?
file_cnt = number of .bin files in the current dir
pid_t pids[file_cnt];
for(i = 0; i < file_cnt; i++)
{
if((pids[i]=fork()) < 0)
{
printf("Error forking");
return 0;
}
else if(pids[i]==0)
{
printf("Entering child \n");
printf("%s ", filenames[i]);
//reading file
handle = open( filenames[i], O_RDONLY );
//allocating memory
buffer = malloc( BUFFER_SIZE );
checksum = 0;
do
{
//calculating checksum
} while( length );
printf( " -%d\n", checksum);
printf("Exiting child \n");
}
}
У меня есть три файла в каталоге, и мой вывод выглядит следующим образом:
There are 3 files:
Entering child
whateve2.bin -10540
Exiting child
Entering child
Entering child
whatever.bin -8399
Exiting child
whatever3.bin -34871
Exiting child
Entering child
whatever.bin -8399
Exiting child
vab@Vaibhav:~/CS330$ Entering child
whatever3.bin -34871
Exiting child
Entering child
whatever3.bin -34871
Exiting child
Entering child
whatever3.bin -34871
Exiting child
Exiting child
, но не выходит из дочернего элемента. - person melpomene   schedule 12.10.2015main
или когда он вызываетexit()
. - person melpomene   schedule 12.10.2015close()
ввести входной файл и передать распределенную память вfree()
и вызватьexit(0);
- person user3629249   schedule 12.10.2015unsigned int checksum;
и должен быть напечатан как %8X. почему перед спецификатором формата в операторе printf() стоит «-»? - person user3629249   schedule 12.10.2015stat()
функция) В размещенном коде не указано, как вычисляется поле «контрольная сумма», поэтому я использовал подразумеваемое значение слова в своих комментариях - person user3629249   schedule 13.10.2015