#c #linux #unix
Вопрос:
int main(){
int fd = open("aaaaaa.txt", O_CREAT | O_RDWR, 0666);
write(fd, "a", 1);
system("more aaaaaa.txt");
unlink("aaaaaa.txt");
close(fd);
return 0;
}
Я хочу спросить, почему эти данные записываются в файл немедленно(по «подробнее» я это вижу), вместо того, чтобы напрямую записываться в кэш страниц ядра(на самом деле не записываются в файл), а через некоторое время кэш страниц действительно записывается в файл потоком flusher .
Комментарии:
1. На чем вы основываете свои выводы?
2.
write
записывает в «файл».more
читает из «файла». Чем бы ни был «файл», кэш страниц, магические вариации на диске или символы, вырезанные в камне, с точки зрения программы на языке си, это всего лишь незначительная деталь реализации.3. Обратите внимание, что такое поведение требуется стандартом POSIX: любая операция, которая доказуемо выполняется после
write()
вызова, должна отображать новые данные. Здесь выполнениеmore
, безусловно, происходит послеwrite()
, потомуsystem("more")
что происходит послеwrite()
в вашей программе. Поэтому, если в системе будет кэш страниц, он должен быть согласованным, и все программы должны считываться из него, а не непосредственно с диска.
Ответ №1:
Он записывается в кэш страниц ядра. И more
считывает данные из кэша страниц ядра. Кэш страниц ядра является общим для всех процессов, поскольку он находится в ядре.