الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال حول تنفيذ برنامج بال Terminal في linux عن طريق c++ ?

مغلقمُجاب
بدأه Install في 8 مارس 2014 · 2 رد · 857 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

لدي برنامج في linux من اجل حسابات بعض العمليات الرياضية

البرنامج ياخذ بارامترين اثنين وله ملف دخل وملف خرج

سويت برنامج في c++ يفتح ملف الدخل ويعدل عليه ومن ثم ينفذ هذا البرنامج ومن ثم ينتظر 500 ميلي ثانية ويفتح ملف الخرج ومن ثم ياخذ النتائج ويحفظها في ملف مؤقت

في الحقيقية اريد تنفيذ هذه العملية حوالي ال 1000 مرة حتى اقوم برسم تابع التغييرات في النهاية بعد اخذ كل القيم

ولكن المشكلة ان 500 ميلي ثانية كثير

انا استخدم الدالة system لتنفيذ البرنامج واريد طريقة لاعرف ان البرنامج انتهى من التنفيذ بدل الانتظار 500 ميلي ثانية

لان لايمكن فتح الملف اذا كان قيد الاستخدام حالياً عن طريق البرنامج "وحتى لو كان ممكن سوف تختلط النتائج ببعضها لو اخذت نتائج عملية سابقة "

هل هناك طريقة اجعل برنامجي ينتظر حتى انتهاء تنفيذ ذلك البرنامج لا اكثر ولا قل ؟؟

ولكم جزيل الشكر

1

{ وَيَوْمَ تَقُومُ السَّاعَةُ يُقْسِمُ الْمُجْرِمُونَ مَا لَبِثُوا غَيْرَ سَاعَةٍ ۚ كَذَٰلِكَ كَانُوا يُؤْفَكُونَ () وَقَالَ الَّذِينَ أُوتُوا الْعِلْمَ وَالْإِيمَانَ لَقَدْ لَبِثْتُمْ فِي كِتَابِ اللَّهِ إِلَىٰ يَوْمِ الْبَعْثِ ۖ فَهَٰذَا يَوْمُ الْبَعْثِ وَلَٰكِنَّكُمْ كُنْتُمْ لَا تَعْلَمُونَ } الروم 55-56

#2 أفضل إجابة

نسق كتابتك واستخدم علامات الترقيم، فكلامك متداخل ويضيع القارئ. يفضل أن تضع مثال صغير بالحد الأدنى الذي يوضح مشكلتك.

 

system ستوقف برنامجك حتى ينفذ الأمر، إذا كنت تريد عملها يدوياً فيمكنك استخدام:

#include <stdio.h>
#include <unistd.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main(int argc, char **argv)
{
  const char *target = "sleep"; // البرنامج المستهدف
  char * const args[] = {"sleep", "2", NULL}; // مصفوفة متغيرات مرسلة له، الأول لإسم البرنامج
  int status;
 
  switch( fork() ) { // أنشئ تفرع من العملية
    case -1:
      perror("Error");  // حصل خطأ
      return -1;
    case 0:
      execvp(target, args); // في العملية الإبنة نفذ هذا البرنامج ليصبح ابن لهذه العملية
      _exit(-1);    // المفترض أن يخرج ولايصل هنا
  }

  wait(&status);    // انتظره حتى ينتهي
  return 0;
}

لكن هذا تقريباً مطابق لما تقوم به system.

تم تعديل هذه المشاركة بواسطة Mr.B في 8 مارس 2014 في 03:31

3
#3

آسف اخي كتبت المشاركة عن طريق برنامج سيء جداً للتصفح يبدوا ان هناك مشكلة فيه بخصوص إرسال طلبات ال post 

جزاكم الله خير

إذا الدالة System ستوقف البرنامج حتى تنتهي من التنفيذ 

جزاكم الله خير حلت المشكلة بفضل الله وشكرا على الكود اخي احتاج للتركيز فيه بعض الشيء  :D

{ وَيَوْمَ تَقُومُ السَّاعَةُ يُقْسِمُ الْمُجْرِمُونَ مَا لَبِثُوا غَيْرَ سَاعَةٍ ۚ كَذَٰلِكَ كَانُوا يُؤْفَكُونَ () وَقَالَ الَّذِينَ أُوتُوا الْعِلْمَ وَالْإِيمَانَ لَقَدْ لَبِثْتُمْ فِي كِتَابِ اللَّهِ إِلَىٰ يَوْمِ الْبَعْثِ ۖ فَهَٰذَا يَوْمُ الْبَعْثِ وَلَٰكِنَّكُمْ كُنْتُمْ لَا تَعْلَمُونَ } الروم 55-56

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…