Bienvenido a Tecnohackers

Tecnohackers » Programacion » Area de Programacion » Programacion a Bajo Nivel. APIs, Hooking, ASM, C/C++, etc.
 » 

Conocer archivo[lstat] Linux



Autor Tema: Conocer archivo[lstat] Linux  (Leído 920 veces)

Desconectado P4|3L0

  • Asiduo
  • *
  • Mensajes: 75
  • TecnoHacker un nuevo proyecto.
    • http://www.tecnohacker.com
Conocer archivo[lstat] Linux
« en: Diciembre 29, 2009, 05:02:25 pm »
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 Login

Mucha de la información la recogí de esa web.

Y pude crear un code.

Código: You are not allowed to view links. Register or Login

#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:
Código: You are not allowed to view links. Register or Login
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!



Tags:
Tags:

 


SMF 2.0.19 | SMF © 2016, Simple Machines
Paginas Afiliadas
Twitter - FaceBook - Daraxblog
Designed by Smf Personal