Всем привет.
Не могли бы вы помочь разобраться с одним вопросом, а именно: что будет если заблочить файл fcntl'ем, а на другом терминале cat'ом попытаться его читать?
Попробовал различные флаги, попробовал установить sgid бит на права доступа к файлу для mandatory блокировки, все равно читается.
вот код:
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv)
{
struct flock *lock;
int fd,err;
lock=(struct flock*)malloc(sizeof(struct flock));
lock->l_type = F_WRLCK|F_RDLCK;
lock->l_start=0;
lock->l_whence = SEEK_SET;
lock->l_len=0;
lock->l_pid = getpid();
if ((fd = open("path", O_CREAT | O_RDONLY)) == -1)
perror("open error");
if ((err=fcntl(fd, F_SETLKW, lock))==-1)
{
perror("fcntl error");
return EXIT_FAILURE;
}
puts("Проверка cat'a");
gets();
return EXIT_SUCCESS;
}