У меня есть следующий код, где я хочу проверить, заблокирован ли файл или нет. Если нет, то я хочу написать ему. Я запускаю этот код, запуская их одновременно на двух терминалах, но я всегда получаю статус «заблокирован» каждый раз на обеих вкладках, даже если я его не заблокировал. Код ниже:Как проверить, заблокирован ли файл или нет?
#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