나는 서버 웹을 쓰고있다.flock(), fgets() : 하위 레벨 잠금, stdio 라이브러리 함수 읽기/쓰기. 가능한가?
각 연결은 개별 스레드에 의해 처리되므로 스레드 수를 미리 알 수는 없습니다.
또한 텍스트 파일 그룹 (숫자도 모름)이 있으며 각 스레드는 각 파일을 읽고 쓸 수 있습니다.
한 번에 한 스레드 만 파일을 쓸 수 있지만 다른 스레드가 동시에 다른 파일에 쓸 수 있습니다.
하나 이상의 스레드에서 파일을 읽는 경우 (동시 읽기 가능) THAT 파일에 쓰는 스레드가 없습니다.
이제이 (Thread safe multi-file writing) 해결책을 발견했지만 fgets()와 같은 함수도 사용하고 싶습니다.
그래서 flock() 파일을 만든 다음 fgets() 또는 다른 stdio 읽기/쓰기 라이브러리 함수를 사용할 수 있습니까?
'fcntl' 잠금의 또 다른 보너스는 프로세스 종료시 자동으로 해제된다는 것입니다 (외부에서 강제 종료되거나 버그가 발생하여 seg-faulting 또는 유사한 문제로 종료되는 경우 포함). – torek
다른 스레드가 동일한 파일을 열면 서로 다른 파일 설명자를 얻을 수 있습니까? 그렇지 않다면 어떤 쓰레드가 파일 디스크립터를 닫고 다른 쓰레드는 그 잠금을 잃으면'fcntl' beacuse를 사용할 수 없습니다. – JustTrying
네, 그들은 다른 파일 기술자를 얻습니다,하지만 당신이 문제가 그 잠금이 풀릴 때마다 동일한 ** 파일 ** (뿐만 아니라 파일 설명을 열고, ** 파일 **)을 참조하는 모든 디스크립터가 릴리스 될 것이라고 생각 : "지정된 프로세스에 대한 파일과 관련된 모든 잠금은 해당 파일에 대한 파일 설명자가 해당 프로세스에 의해 닫히거나 해당 파일 설명자를 보유한 프로세스가 종료되면 제거됩니다." –