blokowania I wprowadziły plik mechanizmu wzdłuż linii sugestią ze strony linux man dla „open” zamek, który stwierdza:Wdrażanie przenośny plik mechanizm
przenośne programy, które chcą wykonać atomową blokowanie plików przy użyciu pliku blokującego i nie należy polegać na obsłudze NFS dla O_EXCL, można utworzyć unikatowy plik w tym samym systemie plików (np. z włączoną nazwą hosta i PID ) i użyć łącza (2), aby utworzyć łącze do pliku blokującego . Jeśli link (2) zwróci 0, blokada się powiedzie. W przeciwnym razie użyj stat (2) na unikalnym pliku, aby sprawdzić, czy liczba jego linków wzrosła do 2, w , w którym przypadku blokada również zakończyła się powodzeniem.
To wydaje się doskonale działa, jednak aby uzyskać 100% pokrycia kodu w moich testów, muszę pokryć przypadek, w którym liczba łącze jest zwiększony do 2.
Próbowałem googling, ale wszystko Wydaje mi się, że jestem w stanie znaleźć to to samo odniesienie powyżej wydalone, jak "sposób, w jaki to zrobiono".
Czy ktoś może mi wyjaśnić, jaki zestaw okoliczności spowodowałby niepowodzenie łącza (zwraca -1), ale liczba linków wzrosła do 2?
bardzo dobre pytanie . Nie mogę wymyślić żadnych okoliczności, w których to by się stało, chyba że dwa konkurujące procesy wybrałyby tę samą unikalną nazwę pliku w tym samym czasie (co oczywiście byłoby złe). Czy możliwe jest obejście bardzo starych błędów NFS? – Celada
Czy chcesz utworzyć pliki blokujące przez NFS?AFAIK powinieneś móc w większości przypadków używać 'flock()' lub 'lockf()'. – Hasturkun