Listar arquivos e diretórios com suas propriedades
Publicado por Raphael Silva do Nascimento (última atualização em 08/12/2010)
[ Hits: 11.583 ]
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); }
Barra de progresso em forma de “roda”
Cadastor de Produtos em C e metodos ordenação
Como agendar um backup automático do PostgreSQL no Cron evitando o problema de senha
Como preparar o Vim/Neovim para corrigir ortografia em português
Dark Web e Malwares na internet, quanto custa?
Configuração básica do Conky para mostrar informações sobre a sua máquina no Desktop
Como verificar o hash de um arquivo baixado da Internet e como criar um hash
Debian 12 - IPTABLES - removendo NFTABLES
OverWatch 2 - Abrindo portas do jogo no Iptables.
Como instalar o adaptador wifi USB Intelbras ACtion A1200 no Linux Mint
Como normalizar seus arquivos MP3 para que fiquem no mesmo volume
WACOM Intuos no Ubuntu - dificuldades para um kra***** (0)
Instalação do Programa Imposto de Renda Pessoa Física 2023 [RESOLVIDO]... (6)
Instalando e compilando o GCC/G++ erro (4)
[C/C++] BRT - Bulk Renaming Tool
[Shell Script] Criação de Usuarios , Grupo e instalação do servidor de arquivos samba
[Shell Script] Tire screenshots com Scrot facilmente com Zscrot
[Shell Script] DioPSI - Script multidistro para instalar programas
[Shell Script] ARS Vídeos - Cortador de vídeos e webcam shooter