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);
}
}