Существует ли раздел человека или другой репозиторий документа для определений структуры данных?

Еще один альтернативный метод должен был бы использовать sed:

ls -l | sed -ne '122,129p'

Но если, как Ваш вопрос предполагает, важно использовать awk для этого, пойдите с комментарием manatwork к ответу Zrajm. Поскольку документация awk указывает:

   A  pattern  may  consist  of two patterns separated by a comma; in this
   case, the action is performed for all lines from an occurrence  of  the
   first pattern though an occurrence of the second.

Таким образом, если Вы хотите, можно также сделать более усовершенствованные условия. Например:

ls -l | awk 'NR==122,/foobar/'

Это запустило бы вывод в строке 122 и продолжилось бы, пока строка не содержала слово "foobar".

Если Вы говорите нам фактический вариант использования, мы смогли помогать с ответами, которые предоставляют лучшее решение. Я волнуюсь, что это походит на проблему XY.

4
12.07.2014, 14:55
1 ответ

Библиотека GNU C имеет справочное руководство , которое включает документацию для всех или большинства структур данных в стандартной библиотеке и расширениях. Он имеет индекс типа . Остерегайтесь, есть также «Справочное руководство по GNU C», но оно и «Справочное руководство по библиотеке GNU C » - две разные вещи.

Вы также можете автоматически сгенерировать документацию, достаточную для просмотра структур данных, с помощью doxygen (обратите внимание, что он работает намного лучше с материалами, которые фактически аннотированы для него, но его можно грубо использовать таким образом).Я пробовал это здесь, на / usr / include , и это заняло <2 минут (создание, прим., ~ 800 МБ HTML). Шаги были следующими:

  1. Создайте базовый файл конфигурации где-нибудь (где угодно), doxygen -g doxygen.conf .

  2. Отредактируйте файл и измените следующие настройки:

     OUTPUT_DIRECTORY = / home / foo / все, что сюда входит # документация 
    OPTIMIZE_OUTPUT_FOR_C = YES 
    EXTRACT_ALL = YES 
    INPUT = / usr / include 
    FILE_PATTERNS = * .h 
    RECURSIVE = YES 
    GENERATE_LATEX = NO 
     

    Обратите внимание, что все они уже существуют в файле конфигурации, вы необходимо выполнить поиск и изменить / установить значения, как показано.

  3. Создайте: doxygen doxygen.conf .

Теперь откройте /home/foo/whatever/html/files.html . Существует index.html , но он, вероятно, настроен по WTF (опять же, doxygen в первую очередь предназначен для материалов, специально аннотированных для него), поэтому список файлов является наиболее предсказуемой точкой входа. Существует также обширный «Индекс структуры данных», но по какой-то причине не все, что вы думаете, индексируется в нем. Например, есть structstat.html , к которому вы можете обратиться, следуя списку файлов, asm-generic -> stat.h , но "struct stat" не упоминается в "Структурах данных" Индекс". Многие стандартные функции C lib следуют этому шаблону: есть макрос / define / typedef в предсказуемом заголовке ( sys / stat.h ), который извлекает что-то внешнее, что в конечном итоге оказывается в заголовке, специфичном для платформы / системы в , например asm-generic.h . Я уверен, что вы замечали это раньше.Пример stat не так уж и плох, поскольку, по крайней мере, окончательное определение все еще называется struct stat , а не struct _fooX_stat .

Так что это требует некоторого привыкания и, в конце концов, не намного лучше, чем использование grep . Он также имеет преимущество dis (?) В том, что в него включены непользовательские поля (например, сравните struct stat , как описано выше, с его описанием в man 2 stat ). Для стандартной библиотеки (и расширений GNU) справочное руководство намного лучше. Однако материал WRT, которого нет в этом руководстве, немного лучше, чем ничего. Я бы порекомендовал, если вы действительно хотите использовать его таким образом, было бы лучше создавать отдельные каталоги независимо, а не весь шебанг (подсказка: вы можете установить RECURSION = NO ). 800 МБ HTML - это довольно громоздко.

3
27.01.2020, 20:58

Теги

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