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

رجاءا مساعدة عاجلة في هذا البرنامج

بدأه asma-java في 1 يناير 2010 · 5 رد · 602 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم سبق و طرحت محاولتي لكن لا احد ساعدني رجاءا لكل من يعرف اي مثال لبرنامج Cفيه انشاء لاكثر من Process عن طريق Fork يتعاملون كلهم مع Parent عن طريق Pipe قصد انجاز عمل باقصر وقت ارجو مدي به و جازاكم الله خيرا

يا رب لك الحمد حتى ترضى و اذا رضيت و بعد ان ترضى

#2

و عليكم السلام,

اقتباس
السلام عليكم سبق و طرحت محاولتي لكن لا احد ساعدني رجاءا لكل من يعرف اي مثال لبرنامج Cفيه انشاء لاكثر من Process عن طريق Fork يتعاملون كلهم مع Parent عن طريق Pipe قصد انجاز عمل باقصر وقت ارجو مدي به و جازاكم الله خيرا

لاحظي أن أسئلتك كلها بدون محاولات, و هذا يعني أن مصيرها الأصلي يجب أن يكون الغلق في هذا المنتدى. ثانياً, قمت بطرح عدة أمثلة في موضوعك الأول, و أنت هنا لم توضحي لنا ماهي المشكلة تحديداَ؟!

أخيراً, المنتدى ليس لحل الواجبات البرمجية يا رعاك الله, فنحن هنا للاستفادة و الإفادة,

عموماً, هذا مثال مبسط قمت بكتابته أيضاً, لأجل توضيح الفكرة, و لكنه متكامل,

الفكرة هو أن هناك ثلاث processes, الأول يسمى grand parent و الثاني parent و الثالث child,

حيث أن grand parent يقوم بإنشاء parent ثم يقوم parent بإنشاء child,

ببساطة:

grand parent ----> parent ----> child

الذي سيحصل, هو أن grand parent سيستقبل جملة نصية يدخلها المستخدم, ثم يرسلها لـ parent الذي سيقوم بعمل reverse للنص, ثم يرسلها لـ child الذي يقوم بعمل capitalization للحروف, و من ثم يعيدها لـ grand parent الذي يقوم بطباعة الجملة بعد عكسها و تكبير الحروف,

رجاءً مرة أخرى, فلتكن الأسئلة أكثر دقة من "أريد مثال", فهناك عدد لا منتهي من الأمثلة التي يمكن كتابتها,

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define PIPE  2
#define READ  0
#define WRITE 1
#define MAX   100

void reverse(char* str)
{
	int beg = 0, end = strlen(str) - 1;
	char temp;

	while(beg < end)
	{
		temp = str[beg];
		str[beg] = str[end];
		str[end] = temp;

		beg++;
		end--;
	}
}

void convert_str_toupper(char* str)
{
	int i;

	for(i = 0; i < strlen(str); i++)
	{
		str = toupper(str);
	}
}

int main()
{
	int fpd[PIPE], spd[PIPE], tpd[PIPE];
	char buf[MAX];

			// [writer, reader]
	pipe(fpd); // [grand parent, parent]
	pipe(spd); // [parent, child]
	pipe(tpd); // [child, grand parent]

	if( fork() ) // grand parent
	{
		close(fpd[READ]);
		close(spd[READ]);
		close(spd[WRITE]);
		close(tpd[WRITE]);

		printf("Enter some string: ");
		fgets(buf, MAX, stdin);
		buf[strlen(buf)-1] = 0;

		write(fpd[WRITE], buf, strlen(buf)+1);
		read(tpd[READ], buf, MAX);
		printf("result string: %s \n", buf);

		close(fpd[WRITE]);
		close(tpd[READ]);
	}
	else // parent
	{
		if( fork() ) // parent
		{
			close(fpd[WRITE]);
			close(spd[READ]);
			close(tpd[READ]);
			close(tpd[WRITE]);

			read(fpd[READ], buf, MAX);
			reverse(buf);
			write(spd[WRITE], buf, strlen(buf)+1);

			close(fpd[READ]);
			close(spd[WRITE]);
		}
		else // child
		{
			close(fpd[READ]);
			close(fpd[WRITE]);
			close(spd[WRITE]);
			close(tpd[READ]);

			read(spd[READ], buf, MAX);
			convert_str_toupper(buf);
			write(tpd[WRITE], buf, strlen(buf)+1);

			close(spd[READ]);
			close(tpd[WRITE]);
		}
	}
	return 0;
}
2
#3

جزيت خيرا اخي خالد على ردك الوافي .. ولكن هناك تعديل بسيط على داله العكس , حيث يجب ان تكون المتغير end كالتالي :

end = (strlen(str) - 1)/2

لا إله الإ الله وحده لا شريك له الملك وله الحمد يحي ويميت وهو على كل شئ قدير

------------------------------------------------------------------------------------------------

gazabigBanner.jpg

------------------------------------------------------------------------------------------------

#4

شكراً أخي محمد,

أنا آسف, و لكني لم أفهم لماذا end يجب أن تشير إلى منتصف النص, أنا جعلت end تشير لآخر حرف, و beg تشير إلى أول حرف, و من ثم أقوم بتحريكهم باتجاه بعض مع تبديل الأحرف بين الموقعين.

تحياتي,

#5

السلام عليكم عندما قلت اني قد قدمت محاولة كان الامر كذلك وكانت مع المرفقات بامكانك التاكد المحاولة بعنوان’ C Linuxالرجاء مساعدتي في اصلاح هذا البرنامج و جازاكم الله خيرا و بتاريخ dec 29

سامحكم الله .

يا رب لك الحمد حتى ترضى و اذا رضيت و بعد ان ترضى

#6
Khaled.Alshaya كتب:

شكراً أخي محمد,

أنا آسف, و لكني لم أفهم لماذا end يجب أن تشير إلى منتصف النص, أنا جعلت end تشير لآخر حرف, و beg تشير إلى أول حرف, و من ثم أقوم بتحريكهم باتجاه بعض مع تبديل الأحرف بين الموقعين.

تحياتي,

فعلاً , الخطأ مني لم انتبه جيداً الى شرط حلقة الـ while .. معذره ..

لا إله الإ الله وحده لا شريك له الملك وله الحمد يحي ويميت وهو على كل شئ قدير

------------------------------------------------------------------------------------------------

gazabigBanner.jpg

------------------------------------------------------------------------------------------------

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