Título: Como utilizar Struct stat Publicado por: txiki481 en 6 Mayo 2018, 12:19 pm Hola tengo este programa y quiero que cuando acabe devuelva información sobre el archivo, y para ello he usado struct stat pero me da error segmentación fault: 11.
Alguien podría decirme como solucionarlo? #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #define BUFFER_TAMAINA 512 int main(int argc, const char * argv[]) { int a; int f,k; char buff[BUFFER_TAMAINA]; FILE *f1; struct stat *stat1; if (argc==3) { if (strcmp(argv[2],"0")!=0 && atoi(argv[2])==0) { write(1, "Arazoa, posizioa ez da zenbaki bat\n", 36); exit(1); } f1=fopen(argv[1], "r+"); if(errno==ENOENT) { write(1, "Fitxategia ez da exititzen\n", 28); exit(1); } while(fgetc(f1)!=EOF){k++;} fclose(f1); if((atoi(argv[2]))>k) { write(1,"Posizio altuegia ezarri da\n",28); exit(1); } if(atoi(argv[2])<0){ write(1, "Arazoa, posizioa negatiboa da\n", 31); exit(1); } f = open(argv[1], O_WRONLY,00777); if(errno==ENOENT){ write(1, "Fitxategia ez da exititzen\n", 28); exit(1); } lseek(f, atoi(argv[2]), SEEK_SET); while ((a=read(0,buff,BUFFER_TAMAINA))>0) { if(stat(argv[1],&*stat1) != NULL) { write(f,buff,a); printf("Información:\n",argv[1]); printf("---------------------------\n"); printf("Tamaño: \t \t %d bytes\n", stat1->st_size); printf("Links: \t%d\n", stat1->st_nlink); printf("inode: \t \t %d\n", stat1->st_ino); } } close(f); } else { write(1,"Erabilera: ./idatzi_fitx [fitxategia] [posizioa]\n",50); } } Título: Re: Como utilizar Struct stat Publicado por: srWhiteSkull en 6 Mayo 2018, 16:59 pm No tienes que definir un puntero a esa estructura, sólo una variable. Luego al segundo argumento de stat() tienes que indicarle a donde apunta la variable(pasar por referencia &), su dirección en memoria, para que dicha función escriba en esa zona y rellene los campos de la estructura.
El valor devuelto es mayor de -1 si tiene éxito. Para acceder a los miembros de una estructura se usa el punto y no la flecha. Algunos valores hay que castearlos(casting) para mostrarlos correctamente y usar el código de formato adecuado. Tienes que usar la etiqueta pertinente para mostrar correctamente el código en el hilo. |