Listar arquivos e diretórios com suas propriedades
Publicado por Raphael Silva do Nascimento (última atualização em 08/12/2010)
[ Hits: 12.038 ]
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); }
Editar o arquivo /etc/rc.d/rc.local
Justificador de texto em 80 colunas
Controle de Funcionários (Básico)
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
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
dpkg: erro: gatilho de arquivo duplicado chamado pelo arquivo de nome (6)
Instalação não está resolvendo as dependencias (2)
Captação de áudio no zorin linux começa a diminuir com o tempo (5)
Alternativas ao Multilogin para gerenciamento de múltiplas contas/prof... (0)