Picproje Elektronik Sitesi

BİLGİSAYAR => Linux => Konuyu başlatan: yamak - 20 Şubat 2013, 00:55:09

Başlık: echo komutunu kendi programımda nasıl kullanırım?
Gönderen: yamak - 20 Şubat 2013, 00:55:09
mesela bazı programlara
echo 9 > GPIO1
gibi komut ile parametre gönderebiliyoruz.Bunu ben kendi programıma nasıl uygularım.
Başlık: Ynt: echo komutunu kendi programımda nasıl kullanırım?
Gönderen: Seckin ALAN - 20 Şubat 2013, 10:00:54
hangi dil ile yazıyorsun?
python ? c++ ?
--------------------------------------------
python
>>> import os
>>> os.system("echo Merhaba Dünya")
>>> os.system("echo 9 > GPIO1 ")

c ve c++
#include <stdlib.h>       
#include <stdio.h>       
int system(const char *command);       
                         
int main(){               
    int command = system("echo 9 > GPIO1");
     // 0 ise başarılı
    printf("%d\n",command);
}
Başlık: Ynt: echo komutunu kendi programımda nasıl kullanırım?
Gönderen: yamak - 20 Şubat 2013, 12:24:29
Siz beni yanlış anladınız galiba. Ben programım içinden bash'komut göndermek istemiyorum.echo komutu ile kendi programıma parametre göndermek istiyorum.Örneğin echo ile gönderdiğim sayıyı 5 ile toplayıp ekrana yazmasını istiyorum.Örnek:
echo 6 > benim_program
sonuc=11
Başlık: Ynt: echo komutunu kendi programımda nasıl kullanırım?
Gönderen: controller - 20 Şubat 2013, 13:37:52
Anladığım kadarıyla bahsettiğiniz GPIO1 program değil aygıt dosyası (device file).

Kendi programınız içinden bu aygıt dosyasını "open" fonksiyonu ile açıp "write" fonksiyonu ile veri yazabilirsiniz.

Programa parametre göndermek için daha çok command line argument kullanılır.

./topla 5 3
8

gibi.
Başlık: Ynt: echo komutunu kendi programımda nasıl kullanırım?
Gönderen: Tagli - 20 Şubat 2013, 13:55:06
Anahtar kelime "pipe". Bu arada, echo 6 > program şeklinde olmaz, bu dosyalara yazmak içindir. echo 6 | program şeklinde olmalı. Program tarafında özel birşey yapmaya gerek de yok. Pipe oluşunca - ki bu işletim sistemi tarafından yapılır - soldaki programın stdout'u sağdaki programın stdin'ine bağlanır. Yani senin programın klavyeden veri okuyormuş gibi çalışacak. Ama o veri klavyeden değil echo'dan gelecek. Senin programın bunu bilmeyecek, bilmesine gerek de yok zaten.

Yalnız bir de şöyle bir durum var: echo ile göndereceğine doğrudan niye göndermiyorsun ki?

Çalışmaya başlamış programa bu şekilde komut gönderemezsin ama. Verdiğin örnekte program değil aygıt node'u (dosya gibi düşünebilirsin) var, o yüzden veri göndermek mümkün olmuş. Çalışmaya başlamış programa sonradan veri göndermek için sinyal kavramını araştırman faydalı olabilir.

Yukarıda anlattığım durumun bir istisnası "named pipe" kullanımı olabilir. Bu şekilde önceden başlamış bir programa veri göndermem mümkün.
Başlık: Ynt: echo komutunu kendi programımda nasıl kullanırım?
Gönderen: trgtylcnky - 20 Şubat 2013, 13:59:09
Yapmak istediğiniz şey sanırım programı çalıştırırken argüman kullanmak. Konsoldan banim_program 6 komutuyla çalıştırabilmek için:

int main(int *args){
    int sonuc=args[1]+5;
    printf("Toplam: %d",sonuc);
    return 0;
}
Başlık: Ynt: echo komutunu kendi programımda nasıl kullanırım?
Gönderen: mufitsozen - 20 Şubat 2013, 14:30:09
Alıntı yapılan: trgtylcnky - 20 Şubat 2013, 13:59:09
Yapmak istediğiniz şey sanırım programı çalıştırırken argüman kullanmak. Konsoldan banim_program 6 komutuyla çalıştırabilmek için:

int main(int *args){
    int sonuc=args[1]+5;
    printf("Toplam: %d",sonuc);
    return 0;
}


sayin @trgtylcnky


    int sonuc=args[1]+5;


yerine


int sonuc =0;
if ( argc > 1 ) {
    sonuc = atoi( argv[1]) + 5;
}


yazsa idiniz  program dogru sonuc verebilirdi.
Başlık: Ynt: echo komutunu kendi programımda nasıl kullanırım?
Gönderen: yamak - 20 Şubat 2013, 14:47:25
Alıntı yapılan: trgtylcnky - 20 Şubat 2013, 13:59:09
Yapmak istediğiniz şey sanırım programı çalıştırırken argüman kullanmak. Konsoldan banim_program 6 komutuyla çalıştırabilmek için:

int main(int *args){
    int sonuc=args[1]+5;
    printf("Toplam: %d",sonuc);
    return 0;
}

Hayır bundan bahsetmiyorum.
Alıntı yapılan: Tagli - 20 Şubat 2013, 13:55:06
Anahtar kelime "pipe". Bu arada, echo 6 > program şeklinde olmaz, bu dosyalara yazmak içindir. echo 6 | program şeklinde olmalı. Program tarafında özel birşey yapmaya gerek de yok. Pipe oluşunca - ki bu işletim sistemi tarafından yapılır - soldaki programın stdout'u sağdaki programın stdin'ine bağlanır. Yani senin programın klavyeden veri okuyormuş gibi çalışacak. Ama o veri klavyeden değil echo'dan gelecek. Senin programın bunu bilmeyecek, bilmesine gerek de yok zaten.

Yalnız bir de şöyle bir durum var: echo ile göndereceğine doğrudan niye göndermiyorsun ki?

Çalışmaya başlamış programa bu şekilde komut gönderemezsin ama. Verdiğin örnekte program değil aygıt node'u (dosya gibi düşünebilirsin) var, o yüzden veri göndermek mümkün olmuş. Çalışmaya başlamış programa sonradan veri göndermek için sinyal kavramını araştırman faydalı olabilir.

Yukarıda anlattığım durumun bir istisnası "named pipe" kullanımı olabilir. Bu şekilde önceden başlamış bir programa veri göndermem mümkün.
Hocam pipe olayını biliyorum ama behsettiğim şey pipe değil.Örneğin Qnx için yazılmış bir led driver var.Bu led driver sistemi derlerken sistem binaryleri arasına eklediğinizde sistemde /dev dizini altında Led adında bi aygıt oluşmakta.Bu aygıtın ismini tabi programda biz belirliyoz.Daha sonra
echo 9 > /dev/Led dediğimizde BeagleBone üzerinde ledlerden 1. ve 4. sü yanıyo.Benim istediğim tam olarak böyle bişey.
Başlık: Ynt: echo komutunu kendi programımda nasıl kullanırım?
Gönderen: mufitsozen - 20 Şubat 2013, 15:23:37
sayin @yamak en kolay sekilde bir character device driver yazarak baslayabilirsiniz.

http://appusajeev.wordpress.com/2011/06/18/writing-a-linux-character-device-driver/ (http://appusajeev.wordpress.com/2011/06/18/writing-a-linux-character-device-driver/)

"Testing The Driver" paragrafinda sizin istediginiz gibi bir kucuk testde yapilmis. Ornek device driverda gelen character string tersine cevriliyor.

echo "hola" > /dev/myDev
cat /dev/myDev



yazilinca ekrana
aloh

cikiyor.

Tabii Qnx icin o  sistemde device driver yazmak nasil yapiliyor ona bakmak lazim.
Başlık: Ynt: echo komutunu kendi programımda nasıl kullanırım?
Gönderen: yamak - 20 Şubat 2013, 15:44:54
Alıntı yapılan: mufitsozen - 20 Şubat 2013, 15:23:37
sayin @yamak en kolay sekilde bir character device driver yazarak baslayabilirsiniz.

http://appusajeev.wordpress.com/2011/06/18/writing-a-linux-character-device-driver/ (http://appusajeev.wordpress.com/2011/06/18/writing-a-linux-character-device-driver/)

"Testing The Driver" paragrafinda sizin istediginiz gibi bir kucuk testde yapilmis. Ornek device driverda gelen character string tersine cevriliyor.

echo "hola" > /dev/myDev
cat /dev/myDev

Teşekkür ederim hocam.İsteğim olay tam olarak buydu.


yazilinca ekrana
aloh

cikiyor.

Tabii Qnx icin o  sistemde device driver yazmak nasil yapiliyor ona bakmak lazim.
Başlık: Ynt: echo komutunu kendi programımda nasıl kullanırım?
Gönderen: yamak - 20 Şubat 2013, 20:56:50
Teşekkür ederim hocam.mufitsozen hocamın verdiği linkteki örneği bi uygulamaya çalışayım.Takıldğım yerlerden yine başınızı ağırtırım :)