Tam Sürümünü Görmek İçin : c++ da harici exe çalıştırma
tunahanabi
17/11/2004, 03:03
c++ da harici bir exe dosyası çalıştırmak istiyorum. bunun için execl, ecexlp ve türevlerini kullandım ama program exe yi bi şekilde çalıştırdıktan sonra sonlanıyor. compile ederken herhangibir sorun vermiyor. ayrıca harici exe dosyası bir output üretecek ve benim programım daha sonra bu output u okuyacak.daha sonraki adımları yürütmediğinden okumayıda yapmıyor.
kod aşağıda yardımcı olursanız sevinirim. ayrıca mail yoluyla cevap verebilirsiniz. altinpina1@itu.edu.tr
şimdiden teşekkürler
================================================== ===
#include <process.h>
#include <stdio.h>
#include <errno.h>
#include <conio.h>
#include <dos.h>
int main()
{
double A;
printf("basliyooom ...\n");
execlp("egm.exe","egm.exe",NULL);
printf("\n oldumu lan dallamalar!! devam edimmi\n");
sleep(5);
FILE *karpuz;
if ( ( karpuz = fopen( "karpuz.usr", "r" ) ) == NULL ); /*harici exe nin ürettiği gosya*/
else {
while (!feof(karpuz)) {
fscanf( karpuz, "%f",&A);
printf("%f",A);
}
fclose(karpuz);
}
printf("alooooouuuvv %f",A);
return 0;
}
acehreli
17/11/2004, 08:07
exec ailesinden olan islevlerin calistirdiklari program, onlari cagiran programin yerini alir. Yani, artik bizim yazdigimiz program degil; exec ile calistirilan program isletilir. Tekrar bizim programimiza donulmez.
Aslinda burada system islevi daha uygun:
system("egm.exe");
cunku hem iki program arasindaki iletisim bir kutuk ile saglaniyor, hem de program akisinin tekrar bizim programimiza donmesini istiyoruz.
Ayrica, gcc'nin uyarisina gore; A double oldugu icin, fscanf'te %lf kullanmak gerekiyor:
fscanf( karpuz, "%lf",&A);
printf'te %f oluyor ama scanf ailesinde %lf. Ne yapalim, hayat boyle... :)
Yine ayrica, A degisken ismi olarak hic de iyi degil. :)
Ali
tunahanabi
17/11/2004, 16:57
teşekkürler
system komutu çalıştı.
yukardaki kodlar benim yazdığım kodla aynı mantıkta olan kodlar olduğu için değişkenlere fazla dikkat etmedim.
çok teşekkürler
[_]? (_)?
tunahanabi
18/11/2004, 16:08
system komutu çalıştı ama bi sorunumuz daha var.
yazdığımız exe dosyası harici exe yi (başka klasörde) kendi klasöründeymiş gibi çalıştırıyor. haliyle 2. exe nin oluşturduğu output dosyası 1. exe ile aynı klasörde oluyor.
zorunluluklarımız:
1) exe dosyaları ayrı klasörlerde olacak.
2) ikinci exe ye müdahale etme şansımız yok. derlenmiş halde. kodları elimizde değil.
3) heriki exe dosyasıda input.usr dosyasını okuyup output.usr dosyasını üretecek.
bu gibi bazı kısıtlamalar içindeyiz. acaba system komutu ile ilgili bazı parametreler de mi var?
Euclides
18/11/2004, 16:56
@tunahanabi:
system yerine bunu kullanmalısın o zaman istediğin yaparsın ister 2.exe'nin çalışmasına müdahale eder, istesen giriş/çıkış larını filitreliyebilirsin.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createprocess.asp
tunahanabi
18/11/2004, 23:36
ben turbo c++ da bu işi yapmaya çalışıyom yolladığın linkten pek bişey anlamadım.
acehreli
19/11/2004, 00:01
tunahanabi, hem system islevine hem de fopen'a kutugun tam adini verebilecegini biliyorsun degil mi?
system("c:/falan/filan/program.exe");
Ali
tunahanabi
19/11/2004, 00:23
o şekilde de yazdım yine aynı şey oldu.
1. exe nin olduğu yere 2. exe nin output dosyası çıktı
acehreli
19/11/2004, 01:03
Program calismaya basladiginda hangi dizindeyse, kutukler normal olarak orada olusuyorlar.
ee++'tan ogrendigim bilgiye gore, programin gordugu (icinde bulundugu) dizini ogrenmek/degistirmek icin getcwd ve chdir islevlerini kullanabilirsin. POSIX standardina uyduklari icin bu islevlerin Windows'da da olmalari gerek...
Ali
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.