RE: [LINUX:4171] Help on "Select" command (About Programming)

=?iso-8859-9?Q?B=FClent_Erdemir?= (buler@kocbank.com.tr)
Fri, 23 Jan 1998 10:03:01 +0200


This message is in MIME format. Since your mail reader does not understand
this format, some or all of this message may not be legible.

------ =_NextPart_001_01BD27E7.8ECFE5C0
Content-Type: text/plain

Merhaba,

Bir tty surucusunun davranisini kontrol etmek icin ioctl komutunu
kullanmak gerekir. Asagidaki kod, diger ayarlarin yaninda, enter
beklemeden bir tty'den gelen karakterleri okumak icin kullanilabilir.
cc[] dizisinin kullanilisina dikkat edin. Anlamlarini man sayfalarindan
bulabilirsiniz. Burada cc[4] ve cc[5] ayarlari sizin istediginiz isi
yapiyor. Biri enter gerekmeden kurukta olan karakteri almanizi, digeri,
kuyrukta karakter olmazsa kac 1/10 saniye beklemesi gerektigini
soyluyor. Bu kod, SCO Unix'te calismasina ragmen saniyorum aynen Linux'a
uygulanabilir.

Kolay gelsin,

Bulent Erdemir
Sistem Analist
Kocbank EDP

int DSOpenPort(struct portinfo *p)
{
int retval;
struct termios options;
p->fd=open(p->portname,O_RDWR|O_NOCTTY);
if(p->fd==-1) {
return(DSOP_NOOPEN);
}
tcgetattr(p->fd,&options);
cfsetispeed(&options,B1200);
cfsetospeed(&options,B1200);
options.c_cc[4]=0;
options.c_cc[5]=10;
options.c_cflag |= PARENB;
options.c_cflag &= ~PARODD;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS7;
retval=tcsetattr(p->fd,TCSANOW,&options);
if(retval==-1) {
return(DSOP_NOPORTSET);
}
return(DSOP_SUCCESS);
}

> -----Original Message-----
> From: Serkan AKCIN [SMTP:serkan@Eniac.cc.selcuk.edu.tr]
> Sent: 19 Ocak 1998 Pazartesi 13:24
> To: Multiple recipients of list
> Subject: [LINUX:4171] Help on "Select" command (About
> Programming)
>
>
> Selam,
> Linux altinda "select" komutunu kullanan arkadaslara bir iki sorum
> olacakti.
> int select(int n,fd_set *readfds,...,struct timeval *timeout);
> Bu komutu kullanma amacim bir chat programinda bir sonsuz dongu
> icerisinde
> bana hangi file descriptorun degistigini belirtmesi ve bende ona gore
> algoritmami degistirmeliyim.
> connect olurken bana gelen File Descriptor(FD) yi ve STDIN'i(0) in
> degerlerini 1>> bir saga kaydirip "veyalama" ile int n degerine
> yolluyorum.Porttan bir request oldugunda bana FD_ISSET ile FD'yi
> kontrol
> edebilyorum.Ama STDIN icin bu kosul gerceklesmiyor.. Yani konsoldaki
> veya terminaldeki kisi ENTER'a basmadigi surece select TRUE olmuyor...
>
> Kisaca hem portu hemde klavyeyi karakter karakter kontrol etmemi
> saglayacak bilgi ve baska komut dizileri varsa bana bildirirseniz
> sevinirim...
>
> #####################################
> Saygilar,
> Serkan AKCIN (compsci3)
> E-Mail: serkan@eniac.cc.selcuk.edu.tr
> #####################################

------ =_NextPart_001_01BD27E7.8ECFE5C0
Content-Type: text/html
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">

Merhaba,

Bir tty surucusunun davranisini = kontrol etmek icin ioctl komutunu kullanmak gerekir. Asagidaki kod, = diger ayarlarin yaninda, enter beklemeden bir tty'den gelen = karakterleri okumak icin kullanilabilir. cc[] dizisinin kullanilisina = dikkat edin. Anlamlarini man sayfalarindan bulabilirsiniz. Burada cc[4] = ve cc[5] ayarlari sizin istediginiz isi yapiyor. Biri enter gerekmeden = kurukta olan karakteri almanizi, digeri, kuyrukta karakter olmazsa kac = 1/10 saniye beklemesi gerektigini soyluyor. Bu kod, SCO Unix'te = calismasina ragmen saniyorum aynen Linux'a uygulanabilir.

Kolay gelsin,

Bulent Erdemir
Sistem Analist
Kocbank EDP


int DSOpenPort(struct = portinfo *p)
{
        int retval;
        struct termios options;
        p->fd=3Dopen(p->portname,O_RDWR|O_NOCTTY);
        if(p->fd=3D=3D-1) {
        =         return(DSOP_NOOPEN);
        }
        tcgetattr(p->fd,&options);
        cfsetispeed(&options,B1200);
        cfsetospeed(&options,B1200);
        options.c_cc[4]=3D0;
        options.c_cc[5]=3D10;
        options.c_cflag |=3D PARENB;
        options.c_cflag &=3D ~PARODD;
        options.c_cflag &=3D ~CSTOPB;
        options.c_cflag &=3D ~CSIZE;
        options.c_cflag |=3D CS7;
        retval=3Dtcsetattr(p->fd,TCSANOW,&options);
        if(retval=3D=3D-1) {
        =         return(DSOP_NOPORTSET);
        }
        return(DSOP_SUCCESS);
}

------ =_NextPart_001_01BD27E7.8ECFE5C0--