Existe uma seção man ou outro repositório de doc para definições de estrutura de dados?

4

Pela milionésima vez eu tive que procurar /usr/include/foo.h para encontrar os membros de struct foo ou foo_t ou o que for. Há uma seção man para chamadas de biblioteca e kernel, algumas das quais incluem descrições de estruturas de dados e outras não. Existe um único local para procurar as definições das estruturas de dados do kernel e da biblioteca?

    
por Bandrami 12.07.2014 / 13:14

1 resposta

3

A biblioteca GNU C tem um manual de referência que inclui documentação para todos ou a maioria dos dados estruturas na biblioteca e extensões padrão. Isso tem um índice de tipos . Cuidado, há também um "Manual de Referência GNU C", mas ele e o Manual de Referência da "Biblioteca GNU C " são duas coisas diferentes.

Você também pode gerar automaticamente a documentação suficiente para navegar pelas estruturas de dados com o doxygen (observe que ele funciona muito melhor com coisas que são realmente anotadas para isso, mas podem ser usadas grosseiramente desta forma). Eu tentei isso aqui no /usr/include e levou < 2 minutos (produzindo, n.b., ~ 800 MB de html). Os passos foram:

  1. Crie um arquivo de configuração básico em algum lugar (em qualquer lugar), doxygen -g doxygen.conf .

  2. Edite o arquivo e altere as seguintes configurações:

    OUTPUT_DIRECTORY       = /home/foo/whatever # documentation goes here
    OPTIMIZE_OUTPUT_FOR_C  = YES
    EXTRACT_ALL            = YES
    INPUT                  = /usr/include
    FILE_PATTERNS          = *.h
    RECURSIVE              = YES
    GENERATE_LATEX         = NO
    

    Note que todos os que já existem no arquivo de configuração, você precisa pesquisar e alterar / definir os valores conforme mostrado.

  3. Gerar: doxygen doxygen.conf .

Agora abra /home/foo/whatever/html/files.html . Existe um index.html , mas é provavelmente WTF-up (novamente, o doxygen é principalmente destinado a coisas que foram intencionalmente anotadas para ele), então a lista de arquivos é o ponto de entrada mais predizível. Há também um copioso "Índice de Estrutura de Dados", mas por qualquer motivo, nem tudo o que você acha que está indexado nele. Por exemplo, você pode alcançar structstat.html seguindo a lista de arquivos, asm-generic - > stat.h , mas "struct stat" não é mencionado no "Data Structures Index". Muitas coisas padrão do C lib seguem esse padrão: há um macro / define / typedef no cabeçalho predigível ( sys/stat.h ) que extrai algo externo que acaba em um cabeçalho específico de plataforma / sistema em, por exemplo. %código%. Tenho certeza que você já percebeu isso antes. O exemplo stat não é tão ruim, na medida em que pelo menos a definição final ainda é chamada asm-generic.h e não struct stat .

Então, isso leva algum tempo para se acostumar e, no final, não é muito melhor do que ferramentas com struct _fooX_stat . Ele também tem a vantagem dis (?) De incluir campos que não são do usuário (por exemplo, compare o grep conforme documentado acima com sua descrição em struct stat ). Para a biblioteca padrão (e extensões GNU), o manual de referência é muito melhor. No entanto, coisas do WRT que não estão nesse manual, é um pouco melhor que nada. Eu recomendo que, se você quiser usá-lo dessa maneira, seria melhor fazer diretórios individuais de forma independente, em vez de toda a shebang (pista: você pode definir man 2 stat ). 800 MB de html é muito complicado.

    
por 12.07.2014 / 15:28