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
#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
#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
while ((opt = getopt(argc, argv, "____")) != -1)
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.