Программирование в стандарте POSIX


Пример 5.28


#include

#include

#include

#include

#define LOCKFILE "my_lockfile"

/* Программа выявляет блокировки, установленные */

/* на файл LOCKFILE */

int main (void) {

int fd;

struct flock lck;

assert ((fd = open (LOCKFILE, O_WRONLY)) != -1);

(void) printf ("ид-р проц. тип начало длина\n");

/* Начнем с попытки установить блокировку на */

/* весь файл */

lck.l_whence = SEEK_SET;

lck.l_start = 0;

lck.l_len = 0;

do {

lck.l_type = F_WRLCK;

(void) fcntl (fd, F_GETLK, &lck);

if (lck.l_type != F_UNLCK) {

(void) printf ("%9d %3c %7ld %5ld\n",

lck.l_pid,

(lck.l_type == F_WRLCK) ? 'W' : 'R',

lck.l_start, lck.l_len);

/* Если эта блокировка покрывает остаток файла, */

/* нет нужды выявлять другие блокировки */

if (lck.l_len == 0) break;

/* Иначе поищем новую блокировку после найденной */

lck.l_start += lck.l_len;

}

while (lck.l_type != F_UNLCK);

return (close (fd));

}




Начало  Назад  Вперед