2014-11-10 2 views
0

Я пытаюсь создать пример (чтобы помочь моему пониманию следующей концепции):файла таблица дескрипторов - родитель/ребенок сравнялся

процесс

Ребенка наследует открытые файлы своего родителя. , которые можно увидеть на этой диаграмме http://www.cs.ucsb.edu/~rich/class/cs170/notes/FileSystem/filetable.rich.jpg

это мой код:

FILE* f = fopen("test.txt", "r"); 

if(fork()==0){ 

    printf("%c", fgetc(f)); //should print e 
    printf("%c", fgetc(f)); //should print s 
    printf("%c", fgetc(f)); //should print t 
    printf("\n"); 
} else { 
    printf("%c", fgetc(f)); // print t 

} 

test.txt containts слова test.

Предполагая, что родительский запуск выполняется первыми, если родительский и дочерний объекты имеют одну и ту же таблицу дескрипторов, не следует выводить систему t(from parent)est(from children). в настоящее время выход t▒▒▒▒.

благодаря Даниель

ответ

2

: C библиотека STDIO использует буферизацию для повышения эффективности. Даже если вы читаете только один символ, функция fgetc читает весь буфер из файла. Для такого небольшого файла это означает, что процесс, который запланирован, сначала читает его полностью.

Вы можете отключить буферизацию с вызовом setvbuf. В качестве альтернативы вы можете использовать функции, которые работают с файловыми дескрипторами напрямую (open, read).

+0

спасибо товарищу! не знал, что – dgamma3

Смежные вопросы