From: Serdar KÖYLÜ (serdarkoylu@fisek.com.tr)
Date: Thu 21 Aug 2003 - 14:29:55 EEST
Selamlar..
Portu nasil actiniz ? Tavsiyem:
fd = open(devicename, O_RDWR | O_NOCTTY | O_NONBLOCK);
seklinde olmali.
Asenkron I/O cok yuksek performans sunar. Ama cok karisik bir istir. Siz
read yaparken bekelmediginiz gibi, write yaparken de beklemezsiniz. Bu
durumda kernelin send ve receive bufferlerini olusturmasini
saglamalisiniz. Hos, burada tty icin bunlar zaten acilir acilmaz
tanimlanmis oluyor.
> res =3D write(fd, buf, strlen(buf));
> printf("result: %d\n", res);
Kodun asil onemli kisimlari yok. Open, sigaction, signal handler vs. vs.
Ama yukaridaki gibi yapmaniz, biraz sorun cikarabilir. Eger sizin
bufferiniz kernel buffer'den buyukse impossible demesi mumkundur. Ya
kuyruk koyacaksiniz, POSIX bunun icin gereken fonksiyonlari iyi
tanimlamistir. Yada, bilgiyi garanti olan 1 Baytlik paketler halinde
yollamayi bir deneyin. Unutmayin, 1 Bayt, seri haberlesmede, 8 Bitten
fazla edebilir.. Seri haberlesmede, 16 Baytlik kernel buffer, bir hayli
genis sayilir: 16*8 = 128 Bit..
Kodun diger kisimlarini gorebilirsek, sanirim daha elle tutulur
konusabiliriz.
Saygi ve sevgiler..