Listar arquivos e diretórios com suas propriedades
Publicado por Raphael Silva do Nascimento (última atualização em 08/12/2010)
[ Hits: 12.047 ]
Criei um programa em C que recebe como parâmetro o nome de um ou mais diretórios e lista todos os arquivos, incluindo todas as propriedades de cada arquivo, como se fosse o comando ls -la.
Foi utilizada a sycall stat sys/stat.h.
/*
  Name: Status.c
  Author: Raphael Silva do Nascimento
  Date: 29/11/10
  Description: script que recebe como parametro o nome de um ou mais diretórios e lista todos os arquivos incluindo todas as propriedades de cada arquivo, como se fosse o comando ls -la. 
*/
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <pwd.h>
#include <grp.h>
#include <time.h>
#include <locale.h>
#include <langinfo.h>
#include <stdio.h>
#include <stdint.h>
#include <errno.h>
#include <fcntl.h>
int informacaoArquivo(char* );
int main(int argc, char * argv[]){   
   int i;
   if(argc >= 2){
      for(i=1; i<argc; i++){
         printf("\n---------------------------%s--------------------------\n\n",argv[i]);
         informacaoArquivo(argv[i]);
      }
   }else{
      printf("\n");      
      informacaoArquivo(".");      
   }
   printf("\n\n");      
   return;
}
int informacaoArquivo(char *url)
{
   struct dirent     *dp;
   struct stat          statbuf;
   struct passwd     *pwd;
   struct group      *grp;
   struct tm         *tm;
   char                  datestring[256];
   DIR              *dir;
   char                  * accesses[] = {"---", "--x", "-w-", "-wx", "r--", "r-x", "rw-", "rwx"};
   ushort       mode;
   int              i=0;
   dir = opendir(url);
   if (dir==NULL){
      perror("Erro ao abrir diretorio");
      return;
   }
   
   /* Loop atraves da entrada do diretorio */ 
   while (dp = readdir(dir)) {
       
       /* Obter informaçoes de entrada */ 
       stat(dp->d_name, &statbuf);      
       
       /* Print o tipo de arquivo */
       if(S_ISREG(statbuf.st_mode)) { printf("-"); } //Arquivo regular
       if(S_ISDIR(statbuf.st_mode)) { printf("d"); } //Diretorio
       if(S_ISCHR(statbuf.st_mode)) { printf("c"); } //Dispositivo de caracter
       if(S_ISLNK(statbuf.st_mode)) { printf("l"); } //Link
       if(S_ISSOCK(statbuf.st_mode)) { printf("s"); }//Arquivo Socket
       
       /* Print a permissão.*/
       for(i = 6; i >= 0; i -=3)
               printf("%s", accesses[(statbuf.st_mode >> i) & 7]);
       
       /* Print o numero de link */
       mode = statbuf.st_nlink;
       printf(" %d", mode);
            
       /* Print o nome do criador se for achado usando getpwuid().*/ 
       if ((pwd = getpwuid(statbuf.st_uid)) != NULL)
      printf(" %-8.8s", pwd->pw_name);
       else
      printf(" %-8d", statbuf.st_uid);
       /* Print nome do grupo se for achado usando getgrgid().*/ 
       if ((grp = getgrgid(statbuf.st_gid)) != NULL)
      printf(" %-8.8s", grp->gr_name);
       else
      printf(" %-8d", statbuf.st_gid);
       /* Print tamanho do arquivo.*/ 
       printf(" %jd", (intmax_t)statbuf.st_size);
       tm = localtime(&statbuf.st_mtime);
       
       /* Obter data em estring. */
       strftime(datestring, sizeof(datestring), nl_langinfo(D_T_FMT), tm);
       printf(" %s %s\n", datestring, dp->d_name);  
   }
   close(dir);
}
Faça um programa em c++ gere um arquivo e depois leia usando um gerador de numeros do tipo s
Agenda eletrônica completa em C
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Instalação dualboot Windows 11 e Debian 13 (0)
Programa fora de escala na tela do pc (33)
Eu queria adicionar a incon do wifi e deixa transparente no fluxbox no... (0)









