Сообщение об ошибке при компиляции структуры flock C++

Я пытаюсь использовать системный вызов fcntl() для создания блокировок в файле, но для этого вам нужно передать экземпляр структуры flock, которая является структурой, определенной в файле fcntl.h. . Я смотрел видео на Youtube, искал решения в Интернете, но все же не могу понять, как заставить мой код компилироваться без ошибок. Я создаю экземпляр структуры flock следующим образом:

#include <fcntl.h>
int start = calculate_buffer(i);
int lock_size = calculate_lock_size(i, j);
int pid = getpid();
struct flock fl{start, lock_size, pid, F_UNLCK, SEEK_SET};

Если вы думаете, что проблема заключается в порядке, в котором я передаю аргументы, это не проблема, так как они упорядочены для macOS (почему это отличается от Linux, я не знаю). В любом случае, я попытался скомпилировать свой код, используя:

g++ main.cpp
gcc main.cpp

Оба из них вызывают следующую ошибку:

main.cpp:111:20: error: expected ';' at end of declaration
struct flock fl{start, lock_size, pid, F_UNLCK, SEEK_SET};
               ^
               ;
1 warning and 1 error generated.

Почему это происходит? И что я могу сделать, чтобы это исправить? Вот некоторые ссылки, которые я использовал, которые показывают, что это именно то, как это должно быть сделано:

https://pubs.opengroup.org/onlinepubs/009695399/functions/fcntl.html https://www.youtube.com/watch?v=whYnqxKSBBo&t=339s


person ttc123    schedule 17.05.2020    source источник


Ответы (1)


Списки инициализаторов нуждаются в равенстве между инициализируемой переменной и самим списком. Ваша декларация должна гласить:

struct flock fl = {start, lock_size, pid, F_UNLCK, SEEK_SET};
person Alex    schedule 17.05.2020