[Linux] Re: seri port programlama

---------

New Message Reply About this list Date view Thread view Subject view Author view

From: Murat Demirten (murat@debian.org)
Date: Fri 23 Aug 2002 - 09:17:37 EEST


Selam,

> select(1, NULL, NULL, NULL, &tv);

Buradaki select kullanimi hatali gozukuyor.
1 tane file descriptor dinleyeceginizi belirtmissiniz ancak bunun hangisi veya birden
fazla olmasi durumunda hangileri oldugunu belirten yapiyi(fd_set) kullanmamissiniz. Ayrica buradaki
1, 1024 bitlik fd_set vektorunun ilk 1 bitini dinleyeceginizi ifade eder. Oysa bu vektorun
ilk 3 biti zaten ayrilmis durumdadir (1 stdout sanirim). Dolayisiyla open islemi sonucunda
size donecek minimum file descriptor 3 olacaktir. fopen sonucunda donen file descriptor 3 oldugunu
varsayarsak sizin ilk 4 biti dinlemeniz gerekir (0'dan basliyor). Bunu da elle girmek yerine bir degiskene
atayarak kullanmalisiniz. Asagida kodun olmasi gerektigi seklini kabaca yaziyorum:

fd_set readfs;
...
int seri_fd = fopen....
int max_file_descriptor = seri_fd + 1;

FD_ZERO(&readfs); // vektoru sifirliyoruz
...
FD_SET(seri_port_fd, &readfs); // dinleyecegimiz file descriptora ait bit 1'leniyor.
...
// timeout ayarlamalari

(int) select(max_file_descriptor, &readfs, NULL, NULL, &timeout);

....

Bu kod isinizi gorecektir. Unutmadan, select her donusunde &readfs'teki tum bitleri sifirlar, dolayisiyla
readfs'in asil icerigini bir yere kopyalamaniz veya her defasinda FD_SET makrosuyla ilgili biti 1'lemeniz
gerekmekte.

kolay gelsin,
-----------------------------------------------------------------------
Liste üyeliğiniz ile ilgili her türlü işlem için
http://liste.linux.org.tr adresindeki web arayüzünü kullanabilirsiniz.

Listeden çıkmak için: 'linux-request@linux.org.tr' adresine,
"Konu" kısmında "unsubscribe" yazan bir e-posta gönderiniz.
-----------------------------------------------------------------------


New Message Reply About this list Date view Thread view Subject view Author view

---------

Bu arsiv hypermail 2b29 tarafindan uretilmistir.