я реализовал механизм блокировки файлы вдоль линий по предложению со страницы линукса людей для «открытия», в котором говорится:Реализация портативного механизма блокировки файлов
Портативных программы, которые хотят выполнить атомную блокировку файла используя файл блокировки , и необходимо избегать поддержки NFS для O_EXCL, может создать уникальный файл в той же файловой системе (например, включить имя хоста и PID) и использовать ссылку (2), чтобы сделать ссылку на файл блокировки , Если ссылка (2) возвращает 0, блокировка будет успешной. В противном случае используйте stat (2) на уникальный файл, чтобы проверить, увеличилось ли его количество ссылок до 2, в , в случае которого блокировка также успешна.
Это, кажется, работает прекрасно, однако, чтобы получить покрытие кода 100% в моем тестировании, мне нужно, чтобы покрыть случай, когда счетчик ссылок увеличивается до 2.
Я пробовал прибегая к помощи, но все Кажется, я могу найти ту же ссылку, что и выше, как «способ, которым это делается».
Может кто-нибудь объяснить мне, какой набор обстоятельств приведет к сбою ссылки (возвращает -1), но количество ссылок увеличивается до 2?
Очень хороший вопрос , Я не могу придумать никаких обстоятельств, при которых это произойдет, если только два конкурирующих процесса одновременно не выбрали одно и то же уникальное имя файла (что, очевидно, было бы плохим). Может быть обходным путем для очень старых ошибок NFS? – Celada
У вас есть необходимость создавать lockfiles над NFS?AFAIK вы должны иметь возможность использовать 'flock()' или 'lockf()' в большинстве случаев. – Hasturkun