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
#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
#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
FILE *f = fopen("yok.txt", "r");
if (f == NULL) ____("dosya açılamadı");
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ışı |