Quais são os arquivos .x em / usr / include?

7

Meu /usr/include contém vários arquivos com a extensão de arquivo .x , como /usr/include/rpcsvc/rquota.x .

Eles parecem fontes C (executando file /usr/include/rpcsvc/rquota.x resultados em C source, ASCII text ), mas não são válidos C (por exemplo, program e version parecem palavras-chave).

O que eles são exatamente? É difícil usar o google com a extensão curta, e alguns sites estão errados / incompletos (por exemplo, Wikipedia diz "arquivos antigos do DirectX ").

    
por anol 10.02.2017 / 15:18

2 respostas

12

São descrições dos protocolos baseados em SunRPC (RPC em inglês para chamada de procedimento remoto). Cada arquivo geralmente descreve estruturas de dados que são usadas por esses RPCs e programas que os implementam; por exemplo, yppasswd.x descreve o protocolo de atualização de senha do Yellow Pages e é relativamente fácil de entender:

program YPPASSWDPROG {
        version YPPASSWDVERS {
                /*
                 * Update my passwd entry
                 */
                int
                YPPASSWDPROC_UPDATE(yppasswd) = 1;
        } = 1;
} = 100009;


struct passwd {
        string pw_name<>;       /* username */
        string pw_passwd<>;     /* encrypted password */
        int pw_uid;             /* user id */
        int pw_gid;             /* group id */
        string pw_gecos<>;      /* in real life name */
        string pw_dir<>;        /* home directory */
        string pw_shell<>;      /* default shell */
};

struct yppasswd {
        string oldpass<>;       /* unencrypted old password */
        passwd newpw;           /* new passwd entry */
};

Isso declara um procedimento de atualização de senha RPC YP, que usa uma estrutura yppasswd como argumento e retorna um int . O arquivo também descreve a própria estrutura yppasswd , juntamente com a estrutura passwd que ela usa.

Esses arquivos geralmente são usados com rpcgen , o que gera o código do servidor e do cliente stub, que pode ser usado para implementar um servidor RPC para o protocolo e / ou um cliente RPC. Pode até gerar um exemplo de código de cliente e servidor.

Como indicado por Kusalananda , o rpcgen(1) manpage tem mais informações.

    
por 10.02.2017 / 15:28
6

Snippet do manual rpcgen em um sistema Linux:

   rpcgen is a tool that generates C code to implement an RPC protocol.  The
   input to rpcgen is a language similar to C known as RPC Language  (Remote
   Procedure Call Language).

   rpcgen  is normally used as in the first synopsis where it takes an input
   file and generates up to four output  files.   If  the  infile  is  named
   proto.x, then rpcgen will generate a header file in proto.h, XDR routines
   in proto_xdr.c, server-side stubs in proto_svc.c, and  client-side  stubs
   in  proto_clnt.c.

Veja man rpcgen .

    
por 10.02.2017 / 15:22