[linux-programlama] Re: Aynı anda ikiiºlem kontrol etmek

---------

From: Huseyin Mizan (hmizan@eliop.com.tr)
Date: Wed 03 Mar 2004 - 07:45:53 EST

  • Next message: Huseyin Mizan: "[linux-programlama] Re: Ayný andaikiiºlem kontrol etmek"

    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


  • Next message: Huseyin Mizan: "[linux-programlama] Re: Ayný andaikiiºlem kontrol etmek"

    ---------

    Bu arsiv hypermail 2.1.6 tarafindan uretilmistir.