Zastrzeżenie: jest to zadanie. Nie proszę o wyraźny kod. Raczej prosze tylko o wystarczającą pomoc, abym mógł zrozumieć mój problem i sam go poprawić.Plik IO wygląda na nieprawidłowy.
Próbuję odtworzyć narzędzie Unix ar
zgodnie z zadaniami domowymi. Większość tego zadania dotyczy pliku IO w C, a inne części zajmują się wywoływaniem systemu itp.
W tym przypadku zamierzam utworzyć prosty listing wszystkich plików w archiwum. Nie dotarłem daleko, jak możesz zauważyć. Plan jest stosunkowo prosty: przeczytaj każdy nagłówek pliku z pliku archiwum i wydrukuj tylko wartość przechowywaną w ar_hdr.ar_name
. Pozostałe pola będą pomijane przez fseek()
, w tym dane pliku, aż do osiągnięcia innego pliku, w którym to momencie proces zaczyna się od nowa. Po osiągnięciu EOF funkcja po prostu się kończy.
Mam małe doświadczenie z plikiem IO, więc jestem już w niekorzystnej sytuacji z tym zadaniem. Zrobiłem co w mojej mocy, aby zbadać właściwe sposoby osiągnięcia moich celów i uważam, że wdrożyłem je najlepiej jak potrafię. To powiedziawszy, wydaje się, że coś jest nie tak z moim wdrożeniem. Dane z pliku archiwum nie wydają się być odczytywane lub przynajmniej przechowywane jako zmienna. Oto mój kod:
struct ar_hdr
{
char ar_name[16]; /* name */
char ar_date[12]; /* modification time */
char ar_uid[6]; /* user id */
char ar_gid[6]; /* group id */
char ar_mode[8]; /* octal file permissions */
char ar_size[10]; /* size in bytes */
};
void table()
{
FILE *stream;
char str[sizeof(struct ar_hdr)];
struct ar_hdr temp;
stream = fopen("archive.txt", "r");
if (stream == 0)
{
perror("error");
exit(0);
}
while (fgets(str, sizeof(str), stream) != NULL)
{
fscanf(stream, "%[^\t]", temp.ar_name);
printf("%s\n", temp.ar_name);
}
if (feof(stream))
{
// hit end of file
printf("End of file reached\n");
}
else
{
// other error interrupted the read
printf("Error: feed interrupted unexpectedly\n");
}
fclose(stream);
}
W tym momencie chcę tylko móc poprawnie odczytać dane. Będę pracował nad szukaniem następnego pliku po tym, jak został zakończony. Chciałbym jednak raz jeszcze podkreślić, że nie proszę o wyraźny kod - muszę się tego nauczyć, a po przekazaniu mi działającego kodu tego nie zrobię.
+1 za pisanie w sposób, który zmniejsza zapotrzebowanie na wszystkie komentarze "blah-blah coś o pracy domowej". – ChiefTwoPencils