Yazdigim programdan dosyalara erisirken “bulunamadi” hatalari aliyorum, veya biri bana CWD problemim oldugunu soyledi. CWD Nedir?
CWD (Current Working Directory, bazen Current Directory veya CD) calismakta olan her programin sahip oldugu bir yoldur. Dosya sistemi uzerindeki bir dizine isaret etmesi beklenir. Orn: /home/aib/cwd1 veya C:\Users\aib\cwd2
CWD’nin onemi, neredeyse butun dosya islemlerindeki dosya isimlerinin ona goreceli olarak alinmasidir.
Mesela sistemin open veya CreateFile cagrilarina, veya programlama dilimizin standart kutuphanesindeki bir dosya fonksiyonuna hede.txt isimli dosyayi acmasini soyledik. Sistem, bu dosyayi CWD altinda arayacaktir: /home/aib/cwd1/hede.txt veya C:\Users\aib\cwd2\hede.txt.
Dosya yolunda bir dizin oldugu takdirde, bu dizin ve altindaki dosya da CWD icinde aranir:
txt_dosyalari/hede.txt → /home/aib/cwd1/txt_dosyalari/hede.txt
“Mevcut dizin” ve “bir ust dizin” anlamina gelen . ve .. dizin isimleri de, dosya yolunun basinda olduklari takdirde, CWD’ye goreceli calisirlar.
./hede/hodo → /home/aib/cwd1/./hede/hodo → /home/aib/cwd1/hede/hodo
../hede/hodo → /home/aib/cwd1/../hede/hodo → /home/aib/hede/hodo
Kisaca yazdigimiz her dosya yolunun basina “{CWD}/” eklenebilir gibi dusunebilirsiniz. Bu yollara “goreceli yol” (relative path) denir.
Bu mekanizmayi atlamanin yolu, “mutlak yol” (absolute path) kullanmaktir. Mutlak yollar / veya X:\ ile baslar. CWD’ye degil, dosya sisteminin kokune/temeline goreceli olarak cozulurler:
/tmp/foo → /home/aib/cwd1/tmp/foo degil → /tmp/foo
C:\hede.txt → C:\Users\aib\cwd2\C:\hede.txt degil → C:\hede.txt
Windows’ta \ ile baslayan yollar da mutlak yollara cok benzeyen bir sekilde davranirlar. CWD’nin surucusunun kokune goreceli alinirlar:
\hede.txt → C:\hede.txt (cunku CWD C: surucusunde)
Calismakta olan bir program, CWD’sini getcwd(3) veya GetCurrentDirectory cagrisiyla alip, chdir(2) veya SetCurrentDirectory cagrisiyla degistirebilir.
Bourne/sh uyumlu bir kabukta calisiyorsaniz CWD’nizi pwd komutuyla alip cd komutuyla degistirebilirsiniz. (Windows’ta ikisi de CD idi yanlis hatirlamiyorsam.)