Tutorial do Sistema Stat System Linux

Tutorial do Sistema Stat System Linux

Chamadas do sistema Linux

As chamadas do sistema fornecidas pelo kernel Linux estão expostas na linguagem de programação C via glibc. Quando uma chamada do sistema é usada, você está se comunicando com o sistema operacional e, no retorno, o sistema operacional se comunica através dos parâmetros que são devolvidos às funções de chamada do sistema (valores de retorno).

Chamada do sistema de estatísticas:

A chamada do sistema de estatísticas é uma chamada do sistema no Linux para verificar o status de um arquivo como verificar quando o arquivo foi acessado. A chamada do sistema stat () realmente retorna atributos de arquivo. Os atributos do arquivo de um inode são basicamente retornados pela função STAT (). Um inode contém os metadados do arquivo. Um inode contém: o tipo do arquivo, o tamanho do arquivo, quando o arquivo foi acessado (modificado, excluído) que é carimbos de tempo e o caminho do arquivo, o ID do usuário e o ID do grupo, os links do arquivo e endereço físico do conteúdo do arquivo.

Podemos dizer que o inode contém todos os dados necessários para a chamada do sistema stat () e é o número do índice para o arquivo que é salvo na tabela inode. Sempre que você cria um arquivo um número de inode para esse arquivo é criado. Usando o sistema estatal chamado As tabelas do sistema podem ser visualizadas.

Sintaxe da chamada do sistema estatal C:

Para usar a chamada do sistema STAT na linguagem de programação C, você deve incluir o seguinte arquivo de cabeçalho:

#incluir

Stat é usado para obter o status de um arquivo. A sintaxe da chamada do sistema estatal C pode não ser a mesma para cada sistema operacional. No Linux, a sintaxe da chamada do sistema estatal é a seguinte:

int stat (const char *caminho, struct stat *buf)

O tipo de retorno da função no int, se a função for executada com sucesso, 0 será retornado se houver algum erro, -1 será retornado.

Aqui Const Char *caminho Especifica o nome do arquivo. Se o caminho do arquivo for um link simbólico, você precisará especificar o link em vez do nome do arquivo.

Então, na função, temos uma estrutura estatística na qual os dados ou informações sobre o arquivo são armazenados que usam um ponteiro nomeado BUF, que é passado como um paramter e preenchido durante a execução da chamada e legível pelo usuário após a chamada.

Estrutura de estatísticas:

A estrutura estatística definida no arquivo de cabeçalho contém os seguintes campos:

STRUT STAT

mode_t st_mode;
ino_t st_ino;
dev_t st_dev;
dev_t st_rdev;
nlink_t st_nlink;
uid_t st_uid;
gid_t st_gid;
off_t st_size;
struct timspec st_atim;
struct timspec st_mtim;
struct timspec st_ctim;
blksize_t st_blksize;
blkcnt_t st_blocks;
;

Descrição:

  1. st_dev: É o ID do dispositivo no qual temos nosso arquivo residente atualmente.
  2. st_rdev: Este campo descreve que um arquivo específico representa um determinado dispositivo.
  3. st_ino: É o número do inode ou o número de série do arquivo. Como é um número de índice, deve ser único para todos os arquivos
  4. st_size: st_size é o tamanho do arquivo em bytes.
  5. st_atime: É a última vez ou a hora recente em que o arquivo foi acessado.
  6. st_ctime: É o momento recente em que o status ou as permissões do arquivo foi alterado.
  7. st_mtime: É o momento recente em que o arquivo foi modificado.
  8. st_blksize: Este campo fornece o tamanho do bloco preferido para o sistema de arquivos de E/S, que pode variar de arquivo para arquivo.
  9. st_blocks: Este campo informa o número total de blocos em múltiplos de 512 bytes.
  10. st_nlink: Este campo diz o número total de links rígidos.
  11. st_uid: Este campo indica o ID do usuário.
  12. st_gid: Este campo indica o ID do grupo.
  13. st_mode: Indica as permissões no arquivo, informa os modos em um arquivo. A seguir, estão os sinalizadores que devem ser definidos para o campo ST_MODE:
Bandeiras Descrição Valor da bandeira
S_ifmt Uma máscara de bits usada para obter o valor do modo de um arquivo 0170000
S_ifsock Uma constante de arquivo do soquete 0140000
S_iflink Uma constante de arquivo de link simbólico 0120000
S_ifreg Arquivo constante para arquivo regular 0100000
S_ifblk Arquivo constante para arquivo de bloco 0060000
S_ifdir Arquivo constante para arquivo de diretório 0040000
S_ifchr Arquivo constante para o arquivo de caracteres 0020000
S_ififo Uma constante de arquivo de FIFO 0010000
S_isuid Definir bit de identificação de usuário 0004000
S_isgid Bit de identificação do grupo definido 0002000
S_isvtx Bit pegajoso que indica texto compartilhado 0001000
S_irwxu Permissões do proprietário (leia, escreva, execute) 00700
S_irusr Leia permissões para o proprietário 00400
S_IWUSR Escreva permissões para o proprietário 00200
S_IXUSR Executar permissões para o proprietário 00100
S_irwxg Permissões de grupo (leia, escreva, execute) 00070
S_irgrp Leia permissões para o grupo 00040
S_IWGRP Escreva permissões para o grupo 00020
S_IXGRP Executar permissões para grupo 00010
S_irwxo Permissões para outros (leia, escreva, execute) 00007
S_iroth Leia permissões para outros 00004
S_iwoth Escreva permissões para outros 00002
S_IXOTH Executar permissões para outros 00001

Como usar o STAT System Call:

O exemplo a seguir mostra como usar o STAT System Call na linguagem de programação C no Linux, Ubuntu.

EXEMPLO 1:

No código a seguir, encontraremos o modo de um arquivo:

CÓDIGO:

#incluir
#incluir
int main ()

// ponteiro para stat struct
STRUT STAT SFILE;
// chamada de sistema de estatísticas
Stat ("Stat.C ", & sfile);
// Acessando ST_Mode (membro de dados da STAT STRICT)
printf ("st_mode = %o", sfile.st_mode);
retornar 0;

Compilar e executar o programa retorna como abaixo:

Neste código, passamos o nome do arquivo na chamada do sistema estatal e depois o ponteiro para Stat Struct, que é sfile. O ponteiro da Stat Struct é então usado para acessar St_mode, que exibe o modo do arquivo usando a instrução PRIMF.

O arquivo de cabeçalho é usado para que você possa usar o STAT System Chamada. O arquivo de cabeçalho é o arquivo de biblioteca de entrada/saída padrão para que você possa usar o printf ou scanf no seu código C.

Exemplo 2:

No código a seguir, obteremos informações sobre o arquivo usando o STAT System Chamada:

CÓDIGO:

#incluir
#incluir
#incluir
#incluir
Void Sfile (CHAR const FILEName []);
int main ()
ssize_t leia;
char* buffer = 0;
size_t buf_size = 0;
printf ("Digite o nome de um arquivo para verificar: \ n");
leitura = getLine (& buffer, & buf_size, stdin);
se (leia <=0 )
printf ("getLine falhou \ n");
saída (1);

if (buffer [read-1] == '\ n')
buffer [read-1] = 0;

int s = aberto (buffer, o_rdonly);
if (s ==-1)
printf ("arquivo não existe \ n");
saída (1);

outro
sfile (buffer);

grátis (buffer);
retornar 0;

Void Sfile (Char Const FileName [])
STRUT STAT SFILE;
if (stat (nome do arquivo, & sfile) ==-1)
printf ("Ocorreu o erro \ n");

// Acessando os membros de dados da STAT STRICT
printf ("\ nfile st_uid %d \ n", sfile.st_uid);
printf ("\ nfile st_blksize %ld \ n", sfile.st_blksize);
printf ("\ nfile st_gid %d \ n", sfile.st_gid);
printf ("\ nfile st_blocks %ld \ n", sfile.st_blocks);
printf ("\ nfile st_size %ld \ n", sfile.st_size);
printf ("\ nfile st_nlink %u \ n", (não assinado int) sfile.st_nlink);
printf ("\ nfile permissões usuário \ n");
printf ((sfile.st_mode & s_irusr)? "r": "-");
printf ((sfile.st_mode & s_iwusr)? "c":"-");
printf ((sfile.st_mode & s_ixusr)? "X": "-");
printf ("\ n");
printf ("\ nfile permissões Grupo \ n");
printf ((sfile.st_mode & s_irgrp)? "r": "-");
printf ((sfile.st_mode & s_iwgrp)? "c":"-");
printf ((sfile.st_mode & s_ixgrp)? "X": "-");
printf ("\ n");
printf ("\ nfile permissões outras \ n");
printf ((sfile.st_mode & s_iroth)? "r": "-");
printf ((sfile.st_mode & s_iwoth)? "c":"-");
printf ((sfile.ST_MODE & S_IXOTH)? "X": "-");
printf ("\ n");

SAÍDA:

No código C acima, inserimos o nome do arquivo e, se o arquivo não existir, a execução do programa será interrompida. Isso é demonstrado na seguinte imagem:

Se existir nosso arquivo, o Sfile (n) da função (n) será chamado no qual passamos o nome do arquivo. Dentro da função, antes de tudo, usamos o STAT System Call, se o stat () retornar -1, deve -se qualquer erro, para que uma mensagem seja impressa e a execução do programa será interrompida.

Então, na instrução printf, usamos o nome da função e o separador de pontos para acessar os membros de dados de Stat Struct.

Então, para o modo de arquivo, acessamos as macros ou bandeiras de st_mode. Aqui lógico e operador é usado para imprimir os respectivos modos. Verificamos as permissões para usuário, grupo e outros para o arquivo especificado (nome do arquivo inserido pelo usuário).

Com isso, você pode ver como usar a chamada do sistema estatal da linguagem de programação C para obter informações do kernel do sistema operacional sobre os arquivos. Se você tiver alguma dúvida, sinta -se livre, conte -nos por seção de comentários.