در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

آموزش برنامه نویسی C قسمت 22 : Fork Function

سلام و وقت بخیر. مفهوم fork در سیستم عامل های مختلف وجود دارد. هنگامی که در برنامه از دستور fork استفاده میکنیم، ار آن خط به بعد دستورات توسط پروسس های همزمان اجرا میشوند. داده های مورد نیاز فرزند از پدر کپی میشود و از آن به بعد هر پروسس داده مربوط به خود را دارد. به بیان دیگر هنگامی که دستور fork فراخوانی میشود، یک پروسس دیگر در سیستم عامل ایجاد میشود که به این پروسس فرزند و به پروسه قبل از آن پدر گفته میشود.

هنگامی که یک برنامه توسط سیستم اجرا میشود، اجرای بخش های بعدی وابسطه به اجرا شدن قسمت های قبلی است. اما در برخی شرایط شما نیاز دارید تا برنامه ای بنویسید تا چند عمل را به صورت موازی انجام دهد. یک مثال می تواند وب سرور باشد. هنگامی که یک کاربر یک صفحه را از وب سرور درخواست می کند اگر سرور پاسخ آن کاربر را بدهد و سپس به درخواست کاربر دیگری گوش دهد، در آن فاصله زمانی بسیاری از درخواست ها به سرور بی پاسخ مانده و از بین میروند. بنابراین سرور باید بتواند هر درخواستی که دریافت می کند را به شکل موازی با درخواست های دیگر پاسخ دهد و در یک زمان به تعداد بیشتری کاربر پاسخ دهد.

کاربرد تابع fork اینجا مشخص میشود. هنگامی که برنامه شما این تابع را صدا کند سیستم عامل برنامه شما را که در قالب یک پروسس اجرا می شود به دو پروسس دقیقا همانند هم تبدیل می کند که به طور موازی اجرا می شوند. خروجی تابع یا صفر است و یا یک عدد. برنامه شما می تواند با بررسی خروجی این تابع متوجه شود که الان کدام پروسس می باشد و با توجه به این موضوع به کاری متفاوت بپردازد. مثلا پروسس سرور وقتی یک درخواست از یک کاربر دریافت می کند تابع fork را صدا می کند. حال برنامه شما در دو پروسس اجرا می شود. اکنون با بررسی مقدار خروجی تابع fork میتوان فهمید که پروسس جاری پروسس فرزند است یا پدر. اگر پروسس پدر بود که یعنی همان سرور است و دوباره به درخواست های کاربر ها گوش می دهد. اما اگر پروسس فرزند بود، صفحه وب مورد نطر را برای کاربر می فرستد. به این ترتیب یک برنامه می تواند در تعداد زیادی نسخه به شکل موازی اجرا شود که هرکدام کار متفاوتی را انجام می دهند.

گفتیم که اگر عملیات fork موفقیت آمیز باشد، یک پروسس فرزند با id برابر صفر ایجاد میشود که پدر این پروسه id غیر صفر دارد. به الگوریتم زیر دقت کنید:

childPID = fork ();
if( childPID >= 0 ) // عملیات ایجاد فرزند موفقیت آمیز بوده یا نه
{
if( childPID == 0 )
      {
      فرآیند فرزند
      }
else
      {
      فرآیند پدر
      }
else // اگر نتواند فرزند درست کند 1- برمیگرداند
خطا در ایجاد فرزند
}

حالا بر اساس این الگوریتم، یک مثال ببینیم (مثال رو از ویکی پدیا ورداشتم)

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
int main()
{
   pid_t pid;
   pid = fork();
   if (pid == -1)
   {
      printf("can't fork, error\n");
      exit(1);
   }
   else if (pid == 0) //Child process
   { 
      int j;
      for ( j = 0 ; j < 10 ; j++ )
      {
         printf("child: %d\n", j);
         sleep(1);
      }
      exit(0);
   }
   else //When fork() returns a positive number, we are in the parent process.
   {
      int  i;
      for ( i = 0 ; i < 10 ; i++ )
      {
         printf("parent: %d\n", i);
         sleep(1);
      }
      exit(0);
   }
   return 0;
}

خروجی به صورت زیر خواهد بود.

parent: 0
child: 0
parent: 1
child: 1
parent: 2
child: 2
parent: 3
child: 3
parent: 4
child: 4
parent: 5
child: 5
parent: 6
child: 6
parent: 7
child: 7
parent: 8
child: 8
parent: 9
child: 9

اگه متوجه نشدید چی شد این حلقه ها، زمان sleep رو متفاوت بدید مثلا parent رو 2 بدید child رو 1 بدید، اونجوری با اختلاف زمانی چاپ، بهتر متوجه میشید چی میشه.

پایان قسمت بیست و دوم

نویسنده : سید محمد باقر موسوی

منبع : جزیره برنامه نویسی وب سایت توسینسو

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی است

#برنامه_نویسی_به_زبان_c #نوشتن_shell_script_در_لینوکس #زبان_برنامه_نویسی_c_در_لینوکس #برنامه_نویسی_به_زبان_c_در_لینوکس #آموزش_گام_به_گام_برنامه_نویسی_c #برنامه_نویسی_c_در_linux #آموزش_برنامه_نویسی_c_در_لینوکس
عنوان
1 آموزش برنامه نویسی C قسمت 1 : نصب محیط برنامه نویسی رایگان
2 آموزش برنامه نویسی C قسمت 2 : Hello World رایگان
3 آموزش برنامه نویسی C قسمت 3 : Data Types رایگان
4 آموزش برنامه نویسی C قسمت 4 : Data Types رایگان
5 آموزش برنامه نویسی C قسمت 5 : اشاره گر ها رایگان
6 آموزش برنامه نویسی C قسمت 6 : آرایه ها رایگان
7 آموزش برنامه نویسی C قسمت 7 : ساختار شرط IF رایگان
8 آموزش برنامه نویسی C قسمت 8 : حلقه for رایگان
9 آموزش برنامه نویسی C قسمت 9 : حلقه While رایگان
10 آموزش برنامه نویسی C قسمت 10 : Struct رایگان
11 آموزش برنامه نویسی C قسمت 11 : تابع دریافت ورودی scanf رایگان
12 آموزش برنامه نویسی C قسمت 12 : فایل های متنی و باینری رایگان
13 آموزش برنامه نویسی C قسمت 13 : توابع رایگان
14 آموزش برنامه نویسی C قسمت 14 : توابع اشاره گر رایگان
15 آموزش برنامه نویسی C قسمت 15 : argc argv رایگان
16 آموزش برنامه نویسی C قسمت 16 : Multiple Source Files رایگان
17 آموزش برنامه نویسی C قسمت 17 : String Functions & Operations رایگان
18 آموزش برنامه نویسی C قسمت 18 : Char Pointers VS Array Char رایگان
19 آموزش برنامه نویسی C قسمت 19 : Binary & Unary Operations رایگان
20 آموزش برنامه نویسی C قسمت 20 : Type Casting رایگان
21 آموزش برنامه نویسی C قسمت 21 : readdir & opendir functions رایگان
22 آموزش برنامه نویسی C قسمت 22 : Fork Function رایگان
23 آموزش برنامه نویسی C قسمت 23 : Thread رایگان
24 آموزش برنامه نویسی C قسمت 24 : Switch Case Statement رایگان
25 آموزش برنامه نویسی C قسمت 25 : qsort رایگان
26 آموزش برنامه نویسی C قسمت 26 : Socket Programming رایگان
27 آموزش برنامه نویسی C قسمت 27 : لیست پیوندی (Linked List) رایگان
زمان و قیمت کل 0″ 0
0 نظر

هیچ نظری ارسال نشده است! اولین نظر برای این مطلب را شما ارسال کنید...

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره پاییزه می تونی امروز ارزونتر از فردا خرید کنی ....