파일이 잠겨 있는지 확인하려면 다음 코드를 사용합니다. 그렇지 않다면 나는 그것에 쓰고 싶다. 나는이 코드를 두 개의 터미널에서 동시에 실행함으로써이 코드를 실행하지만, 잠겨 있지는 않지만 항상 두 개의 탭에서 항상 "잠긴"상태가됩니다. 코드는 다음과 같습니다 :파일이 잠겨져 있는지 확인하는 방법은 무엇입니까?
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
int main()
{
struct flock fl,fl2;
int fd;
fl.l_type = F_WRLCK; /* read/write lock */
fl.l_whence = SEEK_SET; /* beginning of file */
fl.l_start = 0; /* offset from l_whence */
fl.l_len = 0; /* length, 0 = to EOF */
fl.l_pid = getpid(); /* PID */
fd = open("locked_file", O_RDWR | O_EXCL | O_CREAT);
fcntl(fd, F_GETLK, &fl2);
if(fl2.l_type!=F_UNLCK)
{
printf("locked");
}
else
{
fcntl(fd, F_SETLKW, &fl); /* set lock */
write(fd,"hello",5);
usleep(10000000);
}
printf("\n release lock \n");
fl.l_type = F_UNLCK;
fcntl(fd, F_SETLK, &fl); /* unset lock */
}
게시 된 코드에 'F_GETLK'이 (가) 이미 설정되어 있고 원래 게시물이 수정되지 않았습니다. 대답을 조금 설명해 주시겠습니까? 나는 왜이 대답이 받아 들여지는지 상상할 수 없다. 내가 눈치 채지 못한 게 있니? – Anubis
@Anubis OP가 위의 링크에서 대답을 찾았 기 때문에 받아 들여 졌다고 생각합니다. 나는 OP의 코드에 잘못된 것으로 밝혀진 것을 설명하는 자신의 대답을 남겼습니다. – HSchmale