LINUX.ORG.RU

Избранные сообщения pavlick

Эксклюзивное открытие файла

Форум — Development

Мне нужен межпроцесовый мьютекс на базе файла. Возможно ли заблокировать файл от открытия в других процесах? Мне нужен аналог winapi кода:

OpenFile(, , OF_SHARE_EXCLUSIVE|OF_CREATE);
Если процес открывает файл вышеуказаным способом, то любой другой получит ошибку при попытке открыть этот же файл. Я знаю что, что есть flock(), можно заблокировать часть файла, но мне это не подходит, нужно исключить возможность открытия открытого файла (на одной из сторон возможности ограничены, мне доступны только файловые операции).

Описание OF_SHARE_EXCLUSIVE на msdn:

Opens a file with exclusive mode, and denies both read/write access to other processes. If a file has been opened in any other mode for read/write access, even by the current process, the function fails.

 

pavlick
()

Неверное выравнивание

Форум — Development

Добрый день. Столкнулся с непонятной проблемой - пример всё поясняет:

#include <iostream>
struct NN
{
    double dd;
    char i;
};

int main()
{
    NN ar[2];
    std::cout << "alignof double(в норме 8) == " << alignof(double) << '\n';
    std::cout << "alignof NN(в норме 8) == " << alignof(NN) << '\n';
    std::cout << "sizeof NN(в норме 16) == " << sizeof(NN) << '\n';
    std::cout << "array difference(в норме 16) == " << (int)&ar[1] - (int)&ar[0] << std::endl;
    return 0;
}

$ g++ --version
g++ (Debian 4.9.2-16) 4.9.2

$ ./a.out
alignof double(в норме 8) == 8
alignof NN(в норме 8) == 4
sizeof NN(в норме 16) == 12
array difference(в норме 16) == 12
По-моему, компилятор нездоров. Проверял пример на онлайн компиляторах, такой ошибки не обнаружил. gcc ставил с репозитория. Что об этом думаете? В чём причина?

 ,

pavlick
()