CodeBlanks Logo Icon CodeBlanks

perror

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

perror ile hata mesajları yazdırmayı öğrenirsin.

perror fonksiyonu

perror, errno'ya karşılık gelen hata mesajını stderr'e yazdırır. Kullanımı: perror("dosya açılamadı");. Çıktı, senin verdiğin önek, ikinokta ve sistem mesajından oluşur: dosya açılamadı: No such file or directory.

perror errno'yu okur ve ona karşılık gelen metni yazdırır. Mesajı yazdırmak için strerror'a gerek yoktur; perror her ikisini birden yapar. Hata ayıklamada en hızlı yoludur; çünkü hem bağlam (önek) hem neden tek satırda verilir.

stderr ve perror

perror çıktısını stderr'e yazar, stdout'a değil. Bu ayrım önemlidir: program çıktısı boruyla (pipe) başka programa aktarılırken hatalar yine ekranda görünür. stderr tampondan geçirilmez; anında yazılır.

perror'un çıktı biçimi şöyledir: önce senin önekin, sonra ikinokta, sonra boşluk ve errno'ya karşılık gelen mesaj. Önek vermek istemezsen perror(""); ya da perror(NULL); yazabilirsin; yine sistem mesajı yazılır.

Uygulama perror ile dosya hatasını yazdır

fopen("yok.txt", "r") çağrısını FILE *f'ye ata. Eğer f == NULL ise perror("dosya açılamadı"); çağır ve return 1; ile çık. Aksi halde printf("açık\n"); yazdır ve fclose(f); ile kapat. return 0; ile bitir.

Başlangıç kodu

main.c
#include <stdio.h>

int main(void) {
    // fopen ile yok.txt'yi aç
    // NULL ise perror çağır ve return 1
    // değilse printf ve fclose
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>

int main(void) {
    FILE *f = fopen("yok.txt", "r");
    if (f == NULL) {
        perror("dosya açılamadı");
        return 1;
    }
    printf("açık\n");
    fclose(f);
    return 0;
}

Beklenen çıktı

dosya açılamadı: No such file or directory

Soru ve cevaplar

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

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

Soru
FILE *f = fopen("yok.txt", "r");
if (f == NULL) ____("dosya açılamadı");
Cevap
FILE *f = fopen("yok.txt", "r");
if (f == NULL) perror("dosya açılamadı");

Açıklama: perror önek ve sistem mesajını stderr'e yazdırır.

2 perror çıktısını nereye yazar?

  • stdout'a
  • Bir dosyaya
  • syslog'a
  • stderr'e Doğru cevap

Açıklama: perror hata çıktısını stderr'e yazar; böylece borudan etkilenmez.

3 perror çıktı biçimini eşle

Kavram Anlamı
Önek Senin verdiğin metin
: Ayraç
Sistem mesajı errno karşılığı
stderr Çıktı akışı

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