Witam, mam do napisania program w C pod Linuxem przy użyciu funkcji systemowych: open(), write(), readdir() I read(). Program ma stworzyć plik o nazwie podanej jako argument główny(jeśli istnieje już taki plik-koniec programu) następnie do stworzonego pliku wpisać zawartość folderu posortowaną przez funkcję readdir. Podczas kompilacji poniższego programu nie ma żadnych błędów, lecz do powstałego pliku nie zostaje nic zapisane, a fagment programu odpowiedzialny za odczytanie tego pliku generuje błąd Segmentation fault. Czy ktoś może powiedzieć co jest nie tak?
Kod:
#include <dirent.h>
#include <stdio.h>
#include <sys/file.h>
#include <fcntl.h>
# define BUFSIZE 200
int main(int argc, char *argv[])
{
int plik;
const char * nazwa = argv[1];
const int F_OK = 0;
struct dirent * data;
DIR * sciezka;
char *buf;
int i=0;
if( argc == 1)
{
printf("Nie mozna pobrac nazwy pliku, brak argumentu\n");
return 0;
}
if (!access (nazwa, F_OK)) {
printf ("Plik o nazwie %s juz istnieje!\n", argv[1]);
return 0;
}
plik = open(nazwa, O_RDWR | O_TRUNC | O_CREAT, 0644);
if( plik != -1)
printf("Tworze plik o nazwie %s\n", nazwa);
else
{
printf("Wystapil blad\n");
return 0;
}
close(plik);
plik = open(nazwa, O_WRONLY | O_APPEND);
if(plik == -1){printf("ERROR - Nie mozna otworzyc pliku!");}
if(( sciezka = opendir( nazwa ) ) ) {
while(( data = readdir( sciezka ) ) )
{
buf=(data[i].d_name);
write(plik,buf,strlen(buf));
write(plik,"\n",1);
i++;
}
closedir( sciezka );
}
printf("Zamykam plik!\n");
close(plik);
plik=open(nazwa, O_RDONLY);
if(plik==-1)
{
printf("Nie udalo sie otworzyc pliku\n");
} /// SEGMENTATION FAULT(CORE DUMPED)
else
{
read(plik,buf,BUFSIZE);
printf("%s",buf);
}
printf("Zamykam plik!\n");
close(plik);
return 0;
}
```C