
Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
int main(int argc, char * argv[])
{
int fd;
char str[64];
memset(str, 32, 64);
struct flock fi;
int off;
sprintf(str, "Запись сделана процессом %i", getpid());
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; //кол-во байт для блокировки
off = 0;
while (fcntl(fd, F_SETLK, &fi) == -1) //установка блокировки
{
fcntl(fd, F_GETLK, &fi); //описание блокировки
printf("байты %i - %i заблокированы процессом %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("Ошибка разблокирования\n");
close(fd);
}
Соседние файлы в папке block1