CodeBlanks Logo Icon CodeBlanks

getopt

  • C kursu
  • Orta seviye
  • Ders 90/116
  • 5 dk

getopt ile seçenek işleme öğrenirsin.

getopt ile seçenekler

getopt, POSIX sistemlerinde komut satırı seçeneklerini (-v, -n foo gibi) ayrıştıran standart bir fonksiyondur. <unistd.h> başlığında tanımlıdır.

Çağrı: int opt; while ((opt = getopt(argc, argv, "vn:")) != -1). Burada "vn:" seçenek dizesidir: v tek harfli bir seçenek, n: sonundaki iki nokta n'in bir argüman aldığını belirtir. Bu argümana optarg genel değişkeni ile erişilir. getopt tüm seçenekleri taramayı bitirince -1 döndürür ve döngü biter.

switch ile seçenek işleme

getopt döngüsünün gövdesinde genellikle bir switch bloğu bulunur. Her case, bir seçenek harfıne karşılık gelir ve ilgili işlemi yapar.

Örnek: case 'v': printf("ayrıntılı\n"); break; ve case 'n': printf("isim=%s\n", optarg); break;. default dalı bilinmeyen seçenekleri yakalar ve genellikle bir kullanım iletisi yazdırır. Her dalın sonunda break olmalıdır; aksi halde denetim bir sonraki dala akar (fall-through). Bu yapı, gerçek UNIX araçlarının seçenek işleme kalbidir.

Uygulama getopt döngüsü yaz

#include <unistd.h> ekle. int opt; tanımla ve while ((opt = getopt(argc, argv, "vn:")) != -1) döngüsü kur. switch (opt) içinde case 'v': ile printf("ayrıntılı\n"); break;, case 'n': ile printf("isim=%s\n", optarg); break; yaz. Döngüden sonra printf("tamam\n"); ekle.

Başlangıç kodu

main.c
#include <stdio.h>
#include <unistd.h>

// getopt döngüsünü ve switch bloğunu yaz
// döngüden sonra "tamam" yazdır

int main(int argc, char *argv[]) {
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
    int opt;
    while ((opt = getopt(argc, argv, "vn:")) != -1) {
        switch (opt) {
            case 'v':
                printf("ayrıntılı\n");
                break;
            case 'n':
                printf("isim=%s\n", optarg);
                break;
        }
    }
    printf("tamam\n");
    return 0;
}

Beklenen çıktı

tamam

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 getopt çağrısını tamamla

Soru
while ((opt = getopt(argc, argv, "____")) != -1)
Cevap
while ((opt = getopt(argc, argv, "vn:")) != -1)

Açıklama: vn: dizesi; v seçeneği ve n: argümanlı seçenek tanımlar.

2 getopt parçalarını eşle

Kavram Anlamı
getopt Seçenek ayrıştırıcı
optarg Argüman değeri
vn: Seçenek dizesi
-1 Tarama bitti

3 optarg neyi tutar?

  • Seçenek sayısını
  • Programın adını
  • Argüman alan seçeneğin değerini Doğru cevap
  • Hata kodunu

Açıklama: optarg, iki nokta ile işaretlenen seçeneğin (örn. n:) argüman değerini tutar.

Orta seviye bölümündeki tüm dersler