Я имею дело с ситуацией, когда я хочу постоянно сохранять состояние для приложения, в котором много процессов и много потоков внутри этих процессов. Обычно это потребует интенсивного использования блокировки для обеспечения
что нет конфликтов.
Я хочу избежать этого, сохранив данные в файл в режиме O_APPEND. Таким образом, при условии, что данные <4 КБ, запись в файл будет атомарной. Если я использую добавление только структур данных, то у меня есть решение без блокировки. </p>
Однако, чтобы это работало, мне нужно знать расположение данных в файле после того, как я записал в этот файл. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу найти системный вызов, который пишет в
файл, а затем сообщает мне смещение в этом файле, который был записан.
Я могу использовать запись с последующим поиском, чтобы обнаружить это место. тем не мение
это не безопасно, если другой поток совместно использует тот же файловый дескриптор, поэтому потребовал бы от меня защиты записи мьютексом, что противоречит моим попыткам избежать блокировок.
Изучение man-страниц для write, writev, pwrite и prwritev не показало ничего, что могло бы выполнить запись, а затем сообщило мне смещение после записи как один системный вызов, и я полностью осознаю, что , Я что-то посмотрел?