25 Eylül 2014 Perşembe

Posix Standart Streamleri

Posix Standart Streamleri

Posix standard streamleri çalıştırılan her programı geçilen 3 tane stream file descriptor'dır.

Unix ile ortaya çıkan bu yapı Windows üzerinde de aynen kullanılmaktadır. Programlama dilleri ile posix standard streamleri arasındaki farkı NonBuffered ve Buffered I/O başlıklı yazıdan görebilirsiniz.

 

Aşağıdaki standart stream'ler ile çalışmak için kullanılan bazı sistem çağrıları var.

isatty
Unix'te programlar stdout gerçek bir tty mi yoksa pipe ile başka bir programamı yönlendirilmiş diye anlamak isteyebilirler. Böylece davranışını farklılaştırabilirler. Örneğin ls sadece "ls" şeklinde seçeneksiz kullanılırsa ve stdout tty ise çıktı olarak bir satıra birden çok dosya ismini yazar (many per line). Eğer stdout bir başka program ise çıktısını satır satır (one per line ) gönderir.
if (isatty (STDOUT_FILENO))
{
  format = many_per_line;
}
else
{
  format = one_per_line;
} 


perror
perror sistemdeki hataları stderror akımına yazdırmak için kullanılıyor. Örnek :
int fd = open(filename, O_APPEND|O_WRONLY, S_IWUSR);
if(-1 == fd)
{
    perror( filename )
}
Aslında perror tam olarak aşağıdaki gibi çalışıyor.
fprint( stderr, "error: %s\n", strerror( errno ) );

strerror
strerror ise sistemdeki hataları string olarak döndürüyor. strerror GNU libc içinde statik bir buffer kullanıyor. Dolayısıyla thread-safe değil. Thread-safe işlemler için strerror_r kullanılabilir. Bu metod errno isimli global bir değişkeni kullanıyor. Bu değişken aslında thread-local bir değişken.

getpass
getpass.c dosyasına bakınca stdin bir dosyaya yönlendirilmiş olsa bile /dev/tty'den halen okuma/yazma yapabildiğimizi görebiliyoruz.



Hiç yorum yok:

Yorum Gönder