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

---------

From: Linux-Sevenler (velia@linux-sevenler.org)
Date: Wed 03 Mar 2004 - 03:52:25 EST

  • Next message: Tuncay BAÞ: "[linux-programlama] Paket Yükleme"

    Bilgileriniz için önce çok teşekkürler,,,

    ben fork ile ilgili bir örnek (sws_webserver) bulup oradan yola çıkarak bişi ler yaptım ama şindiki sorunum
    fork ile çalışan süreçe bilgi aktaramıyorum
    kod şöyle;
            lcd_init ();
            if (!fork ())
            {
                    while (1)
                    {
                            lcd_update (); buraya lcd_update(line) gibi deÄŸiÅŸtirdima ama olmadı
                    }
            }
            while (1)
            {
                    fd = open_port ();
                    bufptr = buffer;
                    while ((nbytes =
                            read (fd, bufptr,
                                  buffer + sizeof (buffer) - bufptr - 1)) > 0)
                    {
                            bufptr += nbytes;
                            if (bufptr[-1] == '\n' || bufptr[-1] == '\r')
                                    close (fd);
                            break;
                    }
                    barkod = strtok (buffer, "P");
                    sprintf (line, "AA%s%5.5s\n", gettime (), barkod);
                    printf ("%s", line);
                    dosya = fopen ("barkod.db", "at");
                    fprintf (dosya, line);
                    fclose (dosya);
                    sprintf (line, " Kroman Celik~Barkod :%5.5s", barkod);
            }

    On Mon, 01 Mar 2004 16:13:20 +0200
    Serdar KÖYLÜ <serdarkoylu@fisek.com.tr> wrote:

    > Selamlar..
    >
    > Tipik bir thread'in ne oldugunu bilmiyorum sorusu :)
    >
    > Size gerekli olan multi-thread calisan bir program temelde ama bu is ha
    > denince olacak cinsten degildir. En guzeli Asenkron calismanin
    > dayanilmaz hafifligine muracaat etmek olacaktir.
    >
    > Mesela basit yoldan:
    >
    >
    > void lcd_update(int param) {
    >
    > /* LCD'yi update icin gerekenleri buraya yazin */
    >
    > . return;
    > }
    >
    > int main() {
    >
    > . signal(SIGALARM, lcd_update);
    > . alarm(1);
    > . while (1) {
    >
    > . /* Seri portu yazin okuyun vs. */
    > . /* Her saniyede 1 kere lcd_update otomatikman calisacak */
    > . }
    > }
    >
    >
    > Ama, aslen sizin icin daha iyi olacak olan islem, Seri portu asenkron
    > calistirmaktir. pthread_create gibi fonksiyonlarla iki thread olusturmak
    > son derece guzel olur. Daha pratik yoldan fcntl(.... FASYNC) ile seri
    > portu asenkron surer, fcntl(.... FSETOWN, getpid()) ile async read ve
    > write islerini asenkron handlere birakabilirsiniz.
    >
    > Bu fonksiyonlari vs. biraz kurcalayin, gerekirse adim adim bu yontemleri
    > her birlikte inceleriz belki, vaktimiz ve de aklimiz yeterse..
    >
    > Saygi ve sevgiler..
    >
    > > Merhabalar,,,
    > >
    > >
    > >
    > > Benim yapmak istediğim seri porta bağlı olan barkod okuyucuyu sürekli kontrol ederken kullandığım kod aşağıda ve ben bu arada da lcd ye saati bastırmak istiyorum ama nasıl.. fork ile ilgili bilgim yok biraz ip ucu verirseniz mutlu olurum.
    > >
    > > şimdiden teşekkürler
    > >
    > > iÅŸte kod:
    > > while (1)
    > > {
    > > fd = open_port ();
    > > bufptr = buffer;
    > > while ((nbytes =
    > > read (fd, bufptr,
    > > buffer + sizeof (buffer) - bufptr - 1)) > 0)
    > > {
    > > bufptr += nbytes;
    > > if (bufptr[-1] == '\n' || bufptr[-1] == '\r')
    > > close (fd);
    > > break;
    > > }
    > > barkod = strtok (buffer, "P");
    > > sprintf (line, "AA%s%5.5s\n", gettime (), barkod);
    > > printf ("%s", line);
    > > dosya = fopen ("barkod.db", "at");
    > > fprintf (dosya, line);
    > > fclose (dosya);
    > > sprintf (line, " Kroman Celik~Barkod :%5.5s", barkod);
    > > lcd_yaz (line);
    > > }
    > >
    > >
    >
    >
    >


  • Next message: Tuncay BAÞ: "[linux-programlama] Paket Yükleme"

    ---------

    Bu arsiv hypermail 2.1.6 tarafindan uretilmistir.