From: Huseyin Mizan (hmizan@eliop.com.tr)
Date: Wed 03 Mar 2004 - 07:45:53 EST
Merhaba=20
Verdi=C4=9Finiz yan=C4=B1t i=C3=A7in te=C5=9Fekk=C3=BCr ederim , ama =
Cumartesi veya pazar benim=20
Istanbul Beykozdan Gebze ye gelmem m=C3=BCmk=C3=BCn de=C4=9Fil gibi =
g=C3=B6r=C3=BCn=C3=BCyor bana
Ama yine de Buldugum ilk firsatta telefonla arayarak ugramaya =
calisacagim=20
iyi calismalar...
-----Original Message-----
From: linux-programlama-bounce@liste.linux.org.tr
[mailto:linux-programlama-bounce@liste.linux.org.tr]On Behalf Of
Linux-Sevenler
Sent: Wednesday, March 03, 2004 2:27 PM
To: linux-programlama@liste.linux.org.tr
Subject: [linux-programlama] Re: Ayn=C4=B1 anda ikii=C2=BAlem kontrol =
etmek
On Wed, 3 Mar 2004 13:47:32 +0200
hmizan@eliop.com.tr (Huseyin Mizan) wrote:
> Selamlar Arkadaslar,
>=20
> Ben uzun zamand=C4=B1r C kullanm=C4=B1yorum ve fakat bu dili az =
=C3=A7ok bildi=C4=9Fimi
> zannediyorun.Bu dili kullanmamamdaki temel =
=C5=9Fans=C4=B1zl=C4=B1=C4=9F=C4=B1m=C4=B1n uygulama tabanl=C4=B1
> herhangibir yerde =C3=A7al=C4=B1=C5=9Fmamam olarak =
d=C3=BC=C5=9F=C3=BCn=C3=BCyorum .Bu nedenle e=C4=9Fer arkada=C5=9Flar
> yanl=C4=B1=C5=9F anlamazlarsa Cumartesi ve pazar veya heriki =
g=C3=BCnden birisi i=C3=A7in
> arkada=C5=9Flar=C4=B1n uygulamalar=C4=B1na kat=C4=B1larak kendimi bu =
konuda geli=C5=9Ftirmek
> istiyorum.Bu e=C4=9Fer arkada=C5=9Flar=C4=B1 rahats=C4=B1z etmiyecekse =
hafta sonlar=C4=B1 i=C3=A7in
> ofislerinde olabilir anlam=C4=B1nda veya hafta i=C3=A7i internet - =
mail ortam=C4=B1ndan
> olabilir.Bu arada bunu i=C5=9F bulmak i=C3=A7in =
yapmad=C4=B1=C4=9F=C4=B1m=C4=B1 s=C3=B6ylemek isterim (Zaten =C5=9Fu
> anda Scada ,PLC end=C3=BCstriyel otomasyon alan=C4=B1nda =
cal=C4=B1=C5=9F=C4=B1yorum ) .Hem Linux
> ortam=C4=B1n=C4=B1 =C3=B6=C4=9Frenmek hemde =C3=A7ok sevdi=C4=9Fim ama =
bir t=C3=BCrl=C3=BC uygulama f=C4=B1rsat=C4=B1
> bulamad=C4=B1=C4=9F=C4=B1m c programc=C4=B1l=C4=B1=C4=9F=C4=B1m=C4=B1 =
geli=C5=9Ftirmek i=C3=A7in yap=C4=B1yorum.Bu arada object
> oriented programlarda iyi oldu=C4=9Fumu s=C3=B6yleyebilirim.Bu konuda =
arkada=C5=9Flar
> yard=C4=B1m edebilirse sevinirim
>=20
> Komik kar=C5=9F=C4=B1lanmayaca=C4=9F=C4=B1m=C4=B1 umar=C4=B1m
yok ne demek,,
nerede oturuyorsunuz..
Ben Gebzede oturuyorum Fabrikada gelip ziyaret edebilirsiniz..
Kroman =C3=87elik A.=C5=9E.=20
Osmangazi tren istasyonu mevkii Gebze
Not:Gelmeden =C3=B6nce ararsan=C4=B1z iyi olur....Scada plc benimde ilgi =
alan=C4=B1m ..
> -----Original Message-----
> From: linux-programlama-bounce@liste.linux.org.tr
> [mailto:linux-programlama-bounce@liste.linux.org.tr]On Behalf Of =
Serdar
> K=C3=96YL=C3=9C
> Sent: Wednesday, March 03, 2004 12:26 PM
> To: linux-programlama@liste.linux.org.tr
> Subject: [linux-programlama] Re: Ayn=C4=B1 anda ikii=C2=BAlem kontrol =
etmek
>=20
>=20
> Selamlar Cumleten..
>=20
> > Bilgileriniz i=C3=A7in =C3=B6nce =C3=A7ok te=C5=9Fekk=C3=BCrler,,,
> >
> > ben fork ile ilgili bir =C3=B6rnek (sws_webserver) bulup oradan yola =
=C3=A7=C4=B1karak
> bi=C5=9Fi ler yapt=C4=B1m ama =C5=9Findiki sorunum
> > fork ile =C3=A7al=C4=B1=C5=9Fan s=C3=BCre=C3=A7e bilgi =
aktaram=C4=B1yorum
> > kod =C5=9F=C3=B6yle;
> > lcd_init ();
> > if (!fork ())
>=20
> Simdi fork() geri donen degerleri 3 farkli sekilde yorumlanir:
>=20
> 1. Eger deger -1 ise, fork is gormemistir.
> 2. Eger deger 0 ise, siz child process'iniz.
> 3. Eger deger baska bir seyse, siz ayni process olarak devam =
ediyorsunuz
>=20
> Simdi genel bir fork anlatici kodu soyle yazabiliriz
>=20
> pid_t pid;
> int status;
>=20
> pid =3D fork();
>=20
> if (pid =3D=3D -1) {
> . printf("FORK olmadi, biraz daha RAM almak gerekiyor\n");
> } else {
> . if (pid =3D=3D 0) { // Burasi child..
> // Child kodunu buraya yazin.
> . } else {
> . // Main program kodunu buraya yazin.
> . waitpid(pid, &status, 0); // Boyle yapmazsaniz
> . // child olunce defunc olur..
> . }
> }
>=20
> Oysa asagida da goruldugu gibi, sizin kodunuz sadece child kodu =
tarafina
> gidiyor. Gerci boyle yaparakta ayni etkiye ulasirsiniz, ama hic mola
> vermeden while(1) icinde donup durmak harbi saglam CPU yuku demektir.
> Programinizin IDLE olacagi sureleri saglamalisiniz.
>=20
>=20
> > {
> > while (1)
> > {
> > lcd_update (); buraya lcd_update(line) gibi =
de=C4=9Fi=C5=9Ftirdima ama olmad=C4=B1
> > }
> > }
> > while (1)
> > {
> > fd =3D open_port ();
> > bufptr =3D buffer;
> > while ((nbytes =3D
> > read (fd, bufptr,
> > buffer + sizeof (buffer) - bufptr - 1)) > 0)
>=20
> Simdi burada read()'in ne zaman geri donecegini bilebiliyormusunuz ?
> Hayir, skb'ler filan derken tam bu noktada bloke olursunuz. Zaten bu =
tur
> yurutmeyede blocking I/O denir. Bunun en iyi cozumu, non-blocking I/O =
ve
> async signalleri kullanmaktir.
>=20
> Benim bildigim open_port() diye bir fonksiyon yok. Sanirim bir library
> vs. uygulamasi. Bu yuzden dogru yorumu yapmam zor. Ama gideceginiz yol
> kabaca:
>=20
> 1. port'u acin, fd elde edin.
> 2. fd'nin sahibi benim deyin:
>=20
> int fd;
>=20
> int main(...) {
> ...
> ...
> . fcntl(fd, F_SETOWN, getpid());
>=20
> 3. bir signal handler olusturun, soketten okusun:
>=20
>=20
> void handler(int a) {
>=20
> buffer_size =3D read(fd, buffer, size_of_buffer);
>=20
> }
>=20
> 4. Signal handleri kurun:
>=20
> struct sigaction saio; // Signal action
> saio.sa_handler =3D handler;
> saio.sa_flags =3D 0;
> sigaction(SIGIO, &saio, 0);
>=20
> 5. ASYNC moda gecirin soketi:
>=20
> fcntl(fd, F_SETFL, FASYNC);
>=20
> Sonra siz isinize bakin, okunacak bir sey geldikce handler() otomatik
> devreye girer, okur ve buffer'a koyar..
>=20
> Gerci bu bu kadar basittir, ama bazi puf noktalari da vardir. =
Oncelikle
> birisi bufferle ugrasirken digeri onu degistirir hale gelebilir ki
> bilinen race condition mevzusudur. Bu tur sorunlarin en basit cozumude
> circular buffer veya ayri ayri iki buffer kullanmakla olur. Ha, bu en
> iyi cozum degildir, ama en kolayidir.
>=20
> Yukarida, eksik fazla yazilmis, atlanmis bir seyler olabilir, ayakustu
> yaziyorum ama temel prensipleri gostermeye yeter saniyorum..
>=20
> Saygi ve sevgiler..
>=20
> > {
> > bufptr +=3D nbytes;
> > if (bufptr[-1] =3D=3D '\n' || bufptr[-1] =3D=3D '\r')
> > close (fd);
> > break;
> > }
> > barkod =3D strtok (buffer, "P");
> > sprintf (line, "AA%s%5.5s\n", gettime (), barkod);
> > printf ("%s", line);
> > dosya =3D fopen ("barkod.db", "at");
> > fprintf (dosya, line);
> > fclose (dosya);
> > sprintf (line, " Kroman Celik~Barkod :%5.5s", barkod);
> > }
>=20
>=20
>=20
>=20
>=20
>=20
>=20