Я новичок в системном программировании, пожалуйста, подумайте, если мои сомнения очень расплывчаты.Использование пользовательских буферов ввода-вывода для операций с файлами
Я читал, что встроенные буферы пользовательского пространства используются для того, чтобы мы могли получить доступ к данным размера блока с помощью системного вызова через ядро, которое занимает огромную голову, но в пользовательском пространстве мы можем сделать минутный доступ к малым размерам data.I понял, как этот метод эффективен, но я не понял, поскольку эти пользовательские буферы относятся к каждому отдельному процессу, который открывает файл.
Как процесс распознает минутные изменения, внесенные в файл, когда оба одновременно обращаются к файлу.
Это не создает проблемы, поскольку процессы будут обращаться к старым данным, но не к тем данным, которые были изменены каким-либо другим процессом, который все еще находится в буфере пользовательского пространства.
Пожалуйста, обратите внимание, если возникнут какие-либо ошибки.
Даже если буферы представляют собой единый символ, у вас все еще есть гонка. Если требуется многопроцессорное манипулирование файлами, тогда [доступны другие механизмы] (http://linux.die.net/man/2/flock). Абсолютно это проблема, но она не должна решаться на уровне ядра, так как это делает нормальный случай очень эффективным. –
ya..Но как процессам удается решить такие проблемы? Как если бы два процесса обратились к произвольному файлу в нашей системе и постоянно его обновляют, это не будет большой проблемой? –
Это именно то, что означает '' flock' '(http://linux.die.net/man/2/flock), для ссылок выше. Оба процесса должны использовать его для получения эксклюзивного доступа. Другие механизмы - создать временный файл, скопировать данные, обновить, а затем сделать атомное 'переименование' в оригинале. Это действительно зависит от варианта использования, и вы должны тщательно об этом подумать. У вас не может быть процессов доступа к случайным файлам, чтения/записи случайным образом и ожидать, что данные будут согласованными. Буферы с-в процессе могут содержать устаревшие данные, независимо от того, что делает ядро. –