Bueno el título os habrá dicho todo.
Este es mi primer programa de [C] en [Linux] y seguro que os es una [Sorpresa] xD
Estuve en un cursito rápido de compilación y ejecución de codigos .c y como muchas librerias son estandar, yo quise hacer algo nuevo(para mi) asi que la primera funcion que vi fue esta
lstat.
You are not allowed to view links.
Register or
LoginMucha de la información la recogí de esa web.
Y pude crear un code.
#include<sys/stat.h>
#include<stdio.h>
//By P4|3L0
int main(){
char archivo[999];
struct stat attrib;
printf("Introduzca el nombre del archivo:\n");
gets(archivo);
if(lstat(archivo,&attrib)==-1){
printf("Imposible obtener los atributos del archivo: %s\n", archivo);
return(1);
}
else{
printf("ATRIBUTOS DEL ARCHIVO: %s\n",archivo);
printf("\nTipo: ");
if(S_ISREG(attrib.st_mode)!=0) printf("Fichero.\n");
if(S_ISCHR(attrib.st_mode)!=0) printf("Fichero especial de caracter.\n");
if(S_ISBLK(attrib.st_mode)!=0) printf("Fichero especial de bloque.\n");
if(S_ISFIFO(attrib.st_mode)!=0) printf("Tuberia con nombre.\n");
if(S_ISSOCK(attrib.st_mode)!=0) printf("Socket.\n");
if(S_ISLNK(attrib.st_mode)!=0) printf("Link.\n");
printf("\n\nPermisos:\n");
if((attrib.st_mode & S_IRUSR)!=0) printf("Lectura para el usuario.\n");
if((attrib.st_mode & S_IWUSR)!=0) printf("Escritura para el usuario.\n");
if((attrib.st_mode & S_IXUSR)!=0) printf("Ejecucion para el usuario.\n");
if((attrib.st_mode & S_IRGRP)!=0) printf("Lectura para el grupo.\n");
if((attrib.st_mode & S_IWGRP)!=0) printf("Escritura para el grupo.\n");
if((attrib.st_mode & S_IXGRP)!=0) printf("Ejecucion para el grupo.\n");
if((attrib.st_mode & S_IROTH)!=0) printf("Lectura para otros.\n");
if((attrib.st_mode & S_IWOTH)!=0) printf("Escritura para otros.\n");
if((attrib.st_mode & S_IXOTH)!=0) printf("Ejecucion para otros.\n");
if((attrib.st_mode & S_ISUID)!=0) printf("Bit setuid activado.\n");
if((attrib.st_mode & S_ISGID)!=0) printf("Bit setgid activado.\n");
if((attrib.st_mode & S_ISVTX)!=0) printf("Bit sticky activado.\n");
printf("\nOtros atributos:\n");
printf("Numero de bytes: %li\n",attrib.st_size);
printf("Identificador del sistema de ficheros: %li\n",attrib.st_dev);
printf("Numero de i-nodo: %li\n",attrib.st_ino);
printf("Numero de enlaces: %li\n",attrib.st_nlink);
printf("ID de usuario del propietario: %li\n",attrib.st_uid);
printf("ID de grupo del propietario: %li\n",attrib.st_gid);
printf("ID de dispositivo (si es archivo especial): %li\n",attrib.st_rdev);
printf("Bytes en cada bloque: %lu\n",attrib.st_blksize);
printf("Numero de bloques de 1KB: %lu\n",attrib.st_blocks);
}
return(0);
}
Me da unos cuantos Warnings, en estas lineas:
printf("Numero de bytes: %li\n",attrib.st_size);
printf("Identificador del sistema de ficheros: %li\n",attrib.st_dev);
printf("Numero de i-nodo: %li\n",attrib.st_ino);
printf("Numero de enlaces: %li\n",attrib.st_nlink);
printf("ID de usuario del propietario: %li\n",attrib.st_uid);
printf("ID de grupo del propietario: %li\n",attrib.st_gid);
printf("ID de dispositivo (si es archivo especial): %li\n",attrib.st_rdev);
debido a que pongo como como caracter de escape %li que es el escape de long int y las variables no son long int.
También quise ponerle esto: S_ISWHT(m) Test for a whiteout.
Pero me lo pone como undefined
Y luego me pone que gets puede ser perligroso.
Pero corre perfectamente con gcc
Saludos y espero que os guste!