Есть ли способ использовать fcntl блокировки в C для блокировки пространства после EOF? - PullRequest
1 голос
/ 02 мая 2019

Я пишу программу на C Linux для колледжа, использующую низкоуровневый файловый ввод / вывод (в основном я должен использовать fcntl). Мне нужно заблокировать 8 байт после конца файла, чтобы добавить некоторые новые данные. Попытка сделать это, как показано ниже, возвращает ошибку неверного аргумента.

struct flock field_lock;
field_lock.l_type = F_WRLCK;
field_lock.l_whence = SEEK_CUR;
field_lock.l_start = 0;
field_lock.l_len = 2 * sizeof(int);
// ...
lseek(stocks_fd, 0, SEEK_END);
// ...
fcntl(stocks_fd, F_SETLKW, &field_lock);

Есть идеи, как еще я могу этого достичь или что я делаю не так?

изменить 1: https://gist.github.com/limelier/5a7ba8ab166a1f586a3c4feec355b83b Вся программа с улучшением применяется к блокировкам EOF и логике записи, как рекомендуется в комментариях ниже. Тем не менее, проблема все еще существует, и добавлен пример вывода.

...