Как определить, открыт ли файл?

Я вижу два способа сделать это:

  1. Вы можете попробовать отключить все репозитории, кроме того, в котором есть нужный пакет, таким образом запрашивая и устанавливая только из этого репозитория. См. справочную страницу yumдля repolist, --disablerepoи --enablerepo.
  2. Другим вариантом может быть загрузка пакетов RPM для этого пакета и его зависимостей и установка этих:repoquery --requires --resolve --recursive <package_name> | xargs -r yumdownloader. repoqueryтакже имеет параметры для включения/отключения репозиториев, см. справочную страницу. Эта команда найдет нужный пакет vimи все зависимости и загрузит эти RPM. Затем вы можете установить их с помощью yumс помощью локальных утилит установки/обновления или с помощью RPM.

Кроме того, обратите внимание, что man-страница для yumговорит о флаге --security:

This option includes packages that say they fix a security issue, in updates.

Возможно, эти vim-minimalверсии не имеют обновлений безопасности.

1
08.05.2021, 20:59
1 ответ

fnctlэто то, что вы ищете. Его manстраница довольно сложная. Он сообщает вам, доступен ли открытый файл только для чтения или для записи, и возвращает -1 для закрытых файлов. Он мощный и может дать гораздо больше деталей, таких как (неисправный )механизм замка.

#include <fcntl.h>

int
fcntl(int fd, int cmd,...);

Для ваших целей используйте флаг F_GETFL, как в

int r, fd;
r = fcntl ( fd, F_GETFL );

if (r==-1)
printf("File %d is closed.\n", fd);
if (r>0)
printf("File %d is open.\n", fd);

Если возвращаемое значение равно -1, файл не открыт (или fdне является допустимым дескриптором файла ). Если возвращаемое значение положительное, fdописывает открытый файл.

-3
28.07.2021, 11:34

Теги

Похожие вопросы