~/projects/sysprog-assignment-sau/

tarsau : un petit archiveur en C

22 mai 2026 #c#linux#systems

Un archiveur simple pour Linux/Unix écrit en C : regroupe plusieurs fichiers texte dans une archive .sau et les en extrait.

IsmailKonak/sysprog-assignment-sau/README.md

cat README.md

tarsau

Bu proje Linux/Unix ortaminda C dili ile yazilmis basit bir arsivleme programidir. Sikistirma yapmaz. Birden fazla ASCII metin dosyasini tek bir .sau dosyasinda birlestirir. Sonra bu arsivi tekrar acip dosyalari geri cikartabilir.

Projenin amaci

  • Birden fazla metin dosyasini tek arsivde toplamak
  • Ozel bir .sau formatini uygulamak
  • Arsivden dosyalari tekrar cikarmak
  • Dosya izinlerini korumak

Derleme

Projeyi derlemek icin:

make

Temizlik icin:

make clean

Derleme sonunda calistirilabilir dosya adi:

./tarsau

Kullanim

1. Arsiv olusturma

./tarsau -b t1.txt t2.txt t3.txt -o arsiv.sau

Eger -o verilmezse varsayilan cikti adi:

a.sau

Ornek:

printf 'merhaba\n' > t1.txt
printf 'dunya\n' > t2.txt
./tarsau -b t1.txt t2.txt -o deneme.sau

2. Arsiv acma

Mevcut dizine cikarmak icin:

./tarsau -a deneme.sau

Hedef dizine cikarmak icin:

./tarsau -a deneme.sau cikti_klasoru

Eger hedef dizin yoksa program olusturmaya calisir.

.sau dosya formati

Arsiv su sirayla tutulur:

[ILK 10 BYTE][HEADER][DOSYA1_ICERIK][DOSYA2_ICERIK]...

Ilk 10 byte

Header uzunlugunu ASCII sayi olarak tutar.

Ornek:

0000000030

Header formati

Her kayit su sekildedir:

|dosya_adi,izin,boyut|

Ornek:

|t1.txt,0644,8||t2.txt,0755,9|

Tam gorunum ornegi

0000000030|t1.txt,0644,8||t2.txt,0755,9|

Header bittikten sonra dosya icerikleri arka arkaya gelir. Icerikler arasinda ekstra ayirici yoktur.

Programin yaptigi kontroller

  • En fazla 32 giris dosyasi kabul eder
  • Toplam giris boyutu 200 MB sinirini gecmemelidir
  • Giris dosyalari regular file olmali
  • Giris dosyalari ASCII metin olmali
  • ASCII disi dosyada su mesaj verilir:
<dosya_adi> giriş dosyasının formatı uyumsuzdur!
  • Bozuk veya uygunsuz arsivde su mesaj verilir:
Arşiv dosyası uygunsuz veya bozuk!

Izin koruma

Program arsiv olustururken stat() ile izin bilgisi alir. Arsiv acarken chmod() ile bu izinleri geri uygular.

Ornek olarak:

  • 0644
  • 0755
  • 0600

gibi izinler korunmaya calisilir.

Test ornekleri

Basit arsiv olusturma testi

printf 'abc\n' > a1.txt
printf 'xyz\n' > a2.txt
./tarsau -b a1.txt a2.txt -o test.sau
xxd -g 1 -l 80 test.sau

Arsivden geri acma testi

rm -f a1.txt a2.txt
./tarsau -a test.sau
cat a1.txt
cat a2.txt

Hedef dizine acma testi

rm -rf deneme_klasoru
./tarsau -a test.sau deneme_klasoru
ls -l deneme_klasoru

Izin koruma testi

printf 'ozel\n' > p1.txt
printf 'calis\n' > p2.txt
chmod 600 p1.txt
chmod 755 p2.txt
./tarsau -b p1.txt p2.txt -o perms.sau
rm -rf hedef
rm -f p1.txt p2.txt
./tarsau -a perms.sau hedef
ls -l hedef/p1.txt hedef/p2.txt

ASCII disi dosya testi

printf '\377' > bad.bin
./tarsau -b bad.bin -o bozuk.sau

Dosya yapisi

src/tarsau.c
Makefile
README.md

Not

Bu program sikistirma yapmaz. Amac, ozel bir arsiv formati ile dosyalari birlestirip sonra geri acmaktir.

← cd ..