Флаги Inode файловой системы: разница между FS_IOC_GETFLAGS и FS_IOC_FSGETXATTR

Как сказано в хаосе, создание файла допустимым XML-файлом и использование xmlstarlet или аналогичного инструмента обработки xml (например, xsh ) - это «правильный» ответ ... но если вы просто хотите создать простой шаблон, вы должны изменить свой входной файл, чтобы легко находить и заменять токены в тех местах, которые вы хотите изменить. Например:

<controller-host>__CONTROLLER__</controller-host>
 <controller-port>__PORT__</controller-port>
<tier-name>__HOSTNAME__</tier-name>
<node-name>__NODENAME__</node-name>

Затем вы можете использовать любой из обычных инструментов (awk, sed, perl, ruby, что угодно), чтобы заменить __ CONTROLLER __ и т.д. на фактические значения, которые вы хотите, чтобы они имели.

ПРИМЕЧАНИЕ: очень важно использовать строки, которые иначе не встречаются в тексте - поэтому я использовал __ как часть заменяемых строк, например __ PORT __ , а не только PORT .

Это работает для очень простых шаблонов - если вам нужно сделать более сложные шаблоны, многие языки имеют очень сложные библиотеки шаблонов - например, perl имеет Text :: Template (и многие другие - это общая проблема, которая вдохновила на множество решений)

0
09.06.2018, 00:01
2 ответа

En el contexto de Linux, FS_IOC_GETFLAGSy FS_IOC_FSGETXATTRrecuperan indicadores de inodo.

GETFLAGSes el más antiguo ioctl, y proviene originalmente deext2(nuevamente, en Linux ); manipula un valor de 32 -bits y, por lo tanto, tiene capacidades de expansión limitadas: no hay muchos bits sin usar disponibles.

FSGETXATTRproviene de XFS, y recientemente (2016 )se movió de XFS a la capa VFS compartida. Utiliza una estructura de datos, struct fsxattr, que permite más valores y más expansión.

Ambos, y los significados de los datos que devuelven, se definen enlinux/fs.h. Las banderas GETFLAGSse documentan adicionalmente enioctl_iflags(2). Los valores comunes entre los dos corresponden principalmente a las banderas GETFLAGSque históricamente fueron compatibles con XFS:"agregar solo", "sin actualizaciones temporales", "sin volcado", "inmutable" y "actualizaciones sincrónicas".

Tenga en cuenta que, en ambos casos, la compatibilidad varía de un sistema de archivos a otro y, en realidad, algunas banderas no se admiten en absoluto.

2
28.01.2020, 04:20

FS_IOC_GETFLAGS es una interfaz para acceder a los indicadores de archivo de estilo BSD. Simplemente usa una interfaz mucho peor que *BSD, ya que necesita abrir el archivo para obtener acceso. *BSD tiene esta información en struct stat, por lo que si desea obtener la información relacionada en las entradas /dev/ en Linux, puede hacer que una unidad de cinta se rebobine en su medio.

FS_IOC_FSGETXATTRes una interfaz similar pero aparentemente incompatible de XFS que parece ser compatible con ext4 también desde septiembre de 2015.

Conclusión :ambas interfaces están mal diseñadas ya que necesitan abrir el archivo para poder acceder. A los mantenedores no parece importarles sus interfaces, ya que no informan a los usuarios importantes como star, que puede realizar copias de seguridad y restaurar las banderas desde la interfaz FS_IOC_GETFLAGS.

-2
28.01.2020, 04:20

Теги

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