Всем привет.
Не могли бы вы помочь разобраться с одним вопросом, а именно: что будет если заблочить файл fcntl'ем, а на другом терминале cat'ом попытаться его читать?
>что будет еслиХорошая задача!! Предлагаю Научный Метод Тыка.
Обязательно проверь _все флаги fcntl() и все их сочетания.
>>что будет если
> Хорошая задача!! Предлагаю Научный Метод Тыка.
> Обязательно проверь _все флаги fcntl() и все их сочетания.Попробовал различные флаги, попробовал установить sgid бит на права доступа к файлу для mandatory блокировки, все равно читается.
вот код:
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>int main(int argc, char **argv)
{
struct flock *lock;
int fd;
lock->l_type=F_WRLCK;
if ((fd = open("path", NULL)) == -1)
perror("open error");
fcntl(fd, F_SETLKW, lock);
return EXIT_SUCCESS;
}
> int main(int argc, char **argv)
> {
> struct flock *lock;
> int fd;
> lock->l_type=F_WRLCK;
> if ((fd = open("path", NULL)) == -1)
> perror("open error");
> fcntl(fd, F_SETLKW, lock);puts("Посмотри, чего там с котом в другой консоли, потом нажми Enter.");
gets();> return EXIT_SUCCESS;
> }
>[оверквотинг удален]
>> int fd;
>> lock->l_type=F_WRLCK;
>> if ((fd = open("path", NULL)) == -1)
>> perror("open error");
>> fcntl(fd, F_SETLKW, lock);
> puts("Посмотри, чего там с котом в другой консоли, потом нажми Enter.");
> gets();
>> return EXIT_SUCCESS;
>> }
> http://www.opennet.me/openforum/vsluhforumID3/96238.html#46Там все так же читается.
> Там все так же читается.Прекрасно! Задача решена. Неси преподу.
>> Там все так же читается.
> Прекрасно! Задача решена. Неси преподу.Так а почему именно так происходит?
>>> Там все так же читается.
>> Прекрасно! Задача решена. Неси преподу.
> Так а почему именно так происходит?Потому что эти блокировки носят уведомительный характер.