mesela bazı programlara
echo 9 > GPIO1
gibi komut ile parametre gönderebiliyoruz.Bunu ben kendi programıma nasıl uygularım.
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);
}
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
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.
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.
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;
}
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.
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.
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.
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.
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 :)