# File Descriptor (Dosya Tanıtıcısı)

Adres: https://softwaredictionary.org/tr/terimler/file-descriptor
Kategori: İşletim Sistemleri
Son güncelleme: 2026-09-30
Türkçe karşılığı: dosya tanımlayıcısı
Okunuşu: fayl diskriptır

Kısaca: File descriptor, Unix benzeri bir işletim sisteminin process'e açık bir dosya, socket, pipe ya da başka bir girdi/çıktı kaynağı için verdiği küçük tamsayıdır.

## File descriptor (dosya tanıtıcısı) nedir?

Bir process Unix benzeri bir sistemde bir dosya açtığında kernel, file descriptor denen küçük, negatif olmayan bir tamsayı döndürür. Process bu numarayı sonraki `read`, `write` ve `close` gibi system call'lara iletir. Aynı mekanizma sıradan dosyalardan çok daha fazlasını kapsar: pipe'lar, ağ socket'leri, terminaller ve aygıtların hepsine, her şeyin bir dosya olduğu Unix fikrine uygun olarak, file descriptor'lar üzerinden erişilir.

Her process'in kernel içinde bir file descriptor tablosu vardır ve tanıtıcı bu tabloya bir indekstir. Geleneksel olarak 0 standart girdi, 1 standart çıktı ve 2 standart hatadır; her yeni açılış en düşük boş numarayı alır. Alt process'ler üst process'lerinin tanıtıcılarını miras alır; shell yönlendirmesi ve pipe'lar bu şekilde çalışır: `2>&1`, 2 numaralı tanıtıcıyı 1 numaralı tanıtıcının işaret ettiği yere işaret ettir demektir. Her process'in ayrıca açık tanıtıcılar için bir sınırı vardır, çoğu zaman varsayılan olarak 1.024; bu yüzden yoğun sunucular bunu yükseltir ve dosyaları kapatmayı unutan kod eninde sonunda Too many open files hatasıyla başarısız olur.

File descriptor bir vestiyer bileti gibidir. Paltonuzu verirsiniz, kernel dosyayı açar ve numaralı bir bilet alırsınız; paltoyu kullanmak istediğinizde bileti gösterirsiniz. Numaranın kendi process'inizin dışında bir anlamı yoktur; tıpkı biletinizin başka bir mekânda işe yaramaması gibi.

File descriptor çoğu zaman dosya adıyla karıştırılır. Yol (path) diskteki bir dosyayı adlandırır; tanıtıcı ise onun bir process içindeki açık bir örneğine başvurur. Bu yüzden aynı dosyayı açan iki process ayrı, hatta aynı numaraya sahip olabilen tanıtıcılar alır. Windows, handle denen benzer bir kavram kullanır. C'de standart kütüphaneden gelen bir `FILE*` akışı, bir file descriptor'ın etrafındaki tamponlu bir sarmalayıcıdır ve socket, bir tanıtıcının işaret edebileceği kaynak türlerinden biridir.

## Önemli noktalar

- File descriptor, açık bir I/O kaynağına başvuran, process başına bir tamsayıdır.
- 0, 1 ve 2 numaralı tanıtıcılar standart girdi, standart çıktı ve standart hatadır.
- Dosyalara, pipe'lara, socket'lere ve aygıtlara tanıtıcılar üzerinden erişilir.
- Shell yönlendirmesi ve pipe'lar tanıtıcıları yeniden düzenleyerek çalışır.
- Tanıtıcıları kapatmayı unutmak Too many open files hatalarına yol açar.

## Örnek: Shell'de file descriptor'larla çalışmak

```bash
# 0 = stdin, 1 = stdout, 2 = stderr
# Send normal output to one file and errors to another
ls /etc /missing > out.txt 2> errors.txt

# Point stderr (2) at stdout (1), then pipe both into grep
ls /etc /missing 2>&1 | grep missing

# List the open file descriptors of the current shell (Linux)
ls -l /proc/$$/fd

# Show the limit on open descriptors per process
ulimit -n
```

## Sık sorulan sorular

**0, 1 ve 2 numaralı file descriptor'lar nedir?**

Her process'in başladığı üç standart akıştır: 0 standart girdi (stdin), 1 standart çıktı (stdout) ve 2 standart hata (stderr).

**Too many open files ne anlama gelir?**

Process'in açık file descriptor sınırına ulaştığı anlamına gelir. Ya program dosyaları veya socket'leri kapatmayarak tanıtıcı sızdırıyordur ya da gerçekten daha fazlasına ihtiyacı vardır ve sınır `ulimit` ile veya servis yapılandırmasıyla yükseltilmelidir.

**Bir shell komutunda 2>&1 ne anlama gelir?**

2 numaralı file descriptor'ı, yani standart hatayı, 1 numaralı tanıtıcının, yani standart çıktının o anda işaret ettiği yere yönlendirir. Bu, hata mesajlarını normal çıktıyla birlikte yakalamanızı ya da pipe'lamanızı sağlar.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
