From: Derya Sezen (funky@gsu.linux.org.tr)
Date: Thu 21 Aug 2003 - 14:05:27 EEST
turkce karakterler sorun yapmish olabilir, duzeltilmish hali :
Hocam yardiminiz icin tesekkurler. Isi kernel space'e girmeden bu
sekilde halletmek iyi oldu ama cpu'a gelen interrupt'u da nasil
yakalariz merak etmiyor degilim:)=20
Neyse, asil sormak istedigim ayni kodda hem read() hem write() yapmak
istiyorum , write() dedigim anda "I/O possible" diyerek programdan
cikiyor. SIGIO almasini saglayan
fcntl(fd, F_SETOWN, getpid());
yu kaldirdigimda ise write'in dondugu deger dogru ama kars=FD tarafa bilgi
gitmiyor. Benim sonucta ayn=FD programda hem read(), hem write() yapmak
istedigime gore programin SIGIO almasini disable etmemem gerek. Bu
baglamda anlam veremedigim write() yaptigimda programdan birdenbire
cikmasinin nedeni...
termios tanimlari :
*********************
tcgetattr(fd, &eski);
=
=20
yeni.c_cflag =3D baudrate | CRTSCTS | CS8 | CLOCAL | CREAD;
yeni.c_iflag =3D IGNPAR | ICRNL;
yeni.c_oflag =3D 0;
yeni.c_lflag =3D ICANON;
yeni.c_cc[VMIN]=3D1;
yeni.c_cc[VTIME]=3D0;
tcflush(fd, TCIFLUSH);
tcsetattr(fd, TCSANOW, ¥i);
**********************
farkli olarak daha ayrintili
***********************
tcgetattr(fd,&eski);
cfsetispeed(&eski, BaudToConstant(baudrate));
cfsetospeed(&eski, BaudToConstant(baudrate));
=
=20
eski.c_cflag |=3D (CREAD|CLOCAL);=20
eski.c_cflag &=3D ~(CSIZE);
eski.c_cflag |=3D CS8; =20
eski.c_cflag &=3D ~(PARENB);=20
eski.c_cflag &=3D ~(CSTOPB);=20
eski.c_iflag &=3D ~(IXON | IXOFF);=20
eski.c_cflag &=3D ~CRTSCTS; =20
eski.c_lflag |=3D (ICANON);
eski.c_lflag &=3D ~(ECHO | ECHOE | ISIG |ECHOK|ECHONL);
=
=20
tcflush(fd, TCIFLUSH);
tcsetattr(fd, TCSANOW, &eski);
****************************
da denedim. Ikisinde de olmadi. oflag'e de iflag deki gibi degerler
verdim gene olmadi.=20
Sonu=E7ta read() de sorun yasamiyorum. write() olayini nasil
gerceklectirebilirim?!!? write() icin yaptigim sey :
res =3D write(fd, buf, strlen(buf));
printf("result: %d\n", res);
Derya Sezen
P.S. : baglantilarimda sorun yok. Sistemi iki bilgisayar arasinda
denemekteyim. Karsi taraftaki veriyi okuyan koda minicom ile data
gonderebiliyorum ama kendi kodumla g=F6nderemiyorum...
tesekkurler