У меня есть несколько запросов, связанных с системными вызовами read () / pread () в многопоточной среде
Я использую Mac-OSX на основе freeBsd, если это помогает каким-либо образом, я использую только этофайл в режиме чтения, а не для чтения / записи. И язык c / c ++
Предположим, у нас есть файл на диске AAAABBBBCCCCDDDEEEE ....
и 4 алфавита помещаются на одной страницеfile
Итак, Page1: AAAA
Page2: BBBB ..... и т. д.
Теперь я инициирую системный вызов чтения из двух разных потоков с одним и тем же дескриптором файла.я собираюсь прочитать первую страницу из потока 1, вторую страницу из потока 2 и т. д.
read (fd, buff, sizeof (page));
от manНа странице мне дано понять, что чтение также увеличивает указатель файла, поэтому определенно я получу искаженные ответы, такие как
ABCC ABBB .. и т. д. (без определенной последовательности)
, чтобы исправить этоя могу использовать pread ()
"Pread () выполняет ту же функцию, но читаетиз указанной позиции в файле без изменения указателя файла "// с man-страниц
Но я не уверен, поможет ли использование pread мне в моей цели, даже если оно не увеличиваетвнутренний указатель файла, нет никаких гарантий, что ответы не перемешаны.
Все мои данные выровнены по страницам, и я хочу прочитать по одной странице из каждой темы, например
Тема 1 читает: AAAAТема 2 читает: BBBB Тема 3 читает: CCCC ... фактически не искажая содержимое ..
Я также нашел сообщение Безопасно ли читать () из файла, как только write ()возвращает?
, но это было не совсем полезно.
Я также не уверен, действительно ли у read () будет проблема, о которой я думаю. Файл, который я читаюэто бинарный файл и, следовательно, я немного трудно просто быстро прочитать и проверить вручную ..
Любая помощь будет оценена