انجمن‌های فارسی اوبونتو

کمک و پشتیبانی => برنامه‌سازی => نویسنده: mohammadhgh در 03 شهریور 1394، 11:55 ق‌ظ

عنوان: اجرای یک برنامه در ترمینال با استفاده از کد c++
ارسال شده توسط: mohammadhgh در 03 شهریور 1394، 11:55 ق‌ظ
با سلام خدمت دوستان.
من یک برنامه دارم به نام ABC که در لینوکس و از طریق ترمینال اجرا میشه. اجرای برنامه هم به این شکل هست که توی ترمینال با دستور ./abc اجرا میشه و وقتی برنامه بالا اومد یه سری دستورات رو میگیره و کار های مربوطه رو انجام میده.
برای مثال نمونه ای از اجرای برنامه :
mohammad@lenovo:~/Desktop/ABC/alanmi-abc-b8013f66f799$ ./abc
UC Berkeley, ABC 1.01 (compiled Aug 23 2015 10:54:12)
abc 01>
abc 01>
abc 01>
abc 01> read_blif s27.blif
Line 4: Skipping line ".wire_load_slope 0.00".
abc 02>
abc 02>
abc 02>
abc 02> frames -F 4 -i
abc 03>
abc 03>
abc 03> write_verilog out.v
abc 03>
abc 03>
abc 03> quit
mohammad@lenovo:~/Desktop/ABC/alanmi-abc-b8013f66f799$
حالا من میخوام یه برنامه C++ بنویسم که از توش این برنامه رو اجرا کنه. ولی متاسفانه نتونستم راهی پیدا کنم که هنگام فراخوانی برنامه یک فایل script هم به عنوان ورودی بهش داده بشه تا دستورات رو از تو اون اجرا کنه.
اگر دوستان راهی بلدن که بتونم این برنامه را از توی کد c++ اجرا کنم لطفا بفرمایید.
با تشکر
عنوان: پاسخ : اجرای یک برنامه در ترمینال با استفاده از کد c++
ارسال شده توسط: احسان فعالپور در 03 شهریور 1394، 12:10 ب‌ظ
از گوگل پرسیدم :

system("./abc.sh"); // abc.sh should be chmod +x
عنوان: پاسخ : اجرای یک برنامه در ترمینال با استفاده از کد c++
ارسال شده توسط: mohammadhgh در 03 شهریور 1394، 03:48 ب‌ظ
سلام. خیلی ممنون از پاسخ سریعتون.

مشکل من اینه که اول باید برنامه ABC اجرا بشه و بعد یه سری دستورات درون برنامه وارد بشن.
من توی فایل script این ها رو نوشتم : ./abc
read_blif s27.blif
frames -F 4 -i
write_verilog out.v
quit
ولی وقتی خط اول اجرا میشه برنامه ABC باز میشه و خط های دیگه وارد نمیشن تا وقتی که از برنامه ABC خارج بشم.
آیا میشه کاری کرد که وقتی برنامه ABC باز هست چند تا دستور داخلش وارد بشه؟

عنوان: پاسخ : اجرای یک برنامه در ترمینال با استفاده از کد c++
ارسال شده توسط: علی در 03 شهریور 1394، 06:17 ب‌ظ
از گوگل پرسیدم :

system("./abc.sh"); // abc.sh should be chmod +x
استفاده از system در صورتیکه برنامه فقط روی سیستم خودتون قرار باشه اجرا بشه خوبه ! اما اگر قرارباشه برنامه جای دیگه اجرا بشه راه اصولی استفاده از fork و exec هست . ( دلیل : چون سیستم های مختلف ورژن های مختلف از bash دارند و بعضی ها از ksh ، tcsh و ... استفاده میکنند و اینها تفاوتهایی با هم دارند باعث میشه برنامه شما عملکرد یکسانی در سیستم های مختلف  نداشته باشه ) .
با استفاده از دستور fork یک فورک از برنامه در حال اجرا میگیرید و با استفاده از دستورexec پروسس فرزند رو تغییر میدید . با استفاده از  روالهای ورودی استاندارد هم میتونید از صفحه کلید دیتا بگیرید و توی پروسس فرزند ( که اینجا همون برنامه abc شما میشه ) پروسسشون کنید .
برای مطالعه بیشتر کتاب Linux system Programming  اثر Robert Love فصل پنجم رو ( فکر کنم ) بخونید