Заключи и пиши там

Отворете за писане или създайте ./testlocks.txt. Докато заключване на 64 байта от offset е неуспешно: получете и отпечатайте информация за процеса на заключване и преместете offset с още 64 байта. Преместете offset байта от началото на файла и запишете информацията за текущия процес. Изчакайте натискане на клавиш Enter. Отключете 64 заключени байта, изведете грешка при неуспех. Затворете файла.

lockfile.c

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
int main(int argc, char * argv[])
{
  char str[64];
  memset(str, 32, 64);
  struct flock fi;
  sprintf(str, "Stored by process %i", getpid());
  int fd = open("testlocks.txt", O_RDWR|O_CREAT);
  fi.l_type = F_WRLCK;
  fi.l_whence = SEEK_SET;
  fi.l_start = 0;
  fi.l_len = 64;
  int off = 0; 
  while (fcntl(fd, F_SETLK, &fi) == -1)
  {
     fcntl(fd, F_GETLK, &fi);
     printf("bytes %i - %i blocked by process %i\n", off, off+64, fi.l_pid);
     off += 64;
     fi.l_start = off;
  }
  lseek(fd, off, SEEK_SET);
  write(fd, str, strlen(str));
  getchar();
  fi.l_type = F_UNLCK;
  if (fcntl(fd, F_SETLK, &fi) == -1) printf("ERROR while blocking!\n");
  close(fd);
} 

Last updated