تمرین گرافیک
برای دانلود کلیک کنید.
اسلاید 17 گرافیک دانلود
به نام خدا
برای این کار از تابع fork() در لینوکس استفاده می شه که هیچ آرگومانی رو دریافت نمی کنه ولی خوب مقدار بازگشتیش
id پردازه ی فرزند هست برای پردازه ی والد و صفر هست برای خود پردازه ی تازه تولید شده.
برای
کد نویسی در این راستا ما باید یک کد برای هر دوی این دو پردازه بنویسیم و
از طریق مقدار بازگشتی این تابع fork پردازه ی والد رو از فرزند شناسایی
کنیم.
برای ارسال داده ها در این موقعیت یکی از راه ها ارسال داده ها با پایپ لاین هستش که این خودش رو نوع داره.
یکی
ارسال از طریق پایپ معمولی و دیگری از طریق پایپ نامدار هستش که نوع اول
فقط یک نفر باید فرستنده باشه و دیگری دریافت کننده و در اصل دو طرفه نیست.
این از طریق تابع pipe() ساخته میشه.
ولی پایپ نامدار دو طرفه است ولی
در لینوکس half duplex هستش به این مفهوم که در آن واحد فقط یک طرف می تونه
ارسال داده و دیگری دریافت داشته باشه.
نکته ی دیگری که در این مورد
هستش اینه که وقتی یک پردازه پایپ نامدار رو برای read کردن باز می کنه در
آنجا block میشه که به نحوی میشه از این کار جلوگیری کرد که در ادامه
میگم.
برای ساختن یک پایپ نامدار می شه از رو راه استفاده کرد :
1.ساختن اون از طریق shell
$mknode namedpipe_name p
یا
$mkfifo namedpipe_name
که راستی این نکته هم مهمه که در لینوکس به این نوع پایپ fifo میگن چرا که مثل یک صف عمل می کنه
این نوع پایپ یک فایل در اصل هستش که در این موقع یعنی یعد از ساخت باید سطح دسترسی اون رو تنظیم کرد.
ولی به طور خودکار به صورت زیر هستش:
همان طور که می دونیم این flag های کنترلی در لینوکس 3 دسته هستن:1.برای صاحب اون فایل 2.برای گروه 3.برای افراد دیگر
در
این مورد id سازنده ی اون فایل به این پایپ اختصاص داده میشه id گروه اون
به این فایل داده میشه و id دایرکتوری والد این فایل به این فایل اختصاص
داده میشه.
2. برای ساختن این فایل در کد برنامه نویسی باید از تابع
mkfifo() استفاده کنید که آرگومان اول اشاره گری از نوع const به این مکان
این فایل می باشد و دومی سطح دسترسی به اون فایل می باشد.
برای استفاده
از این پایپ باید اون رو با استفاده از توابع open() و یا fopen() باز کرد
که در صورت استفاده از اولی مقدار بازگشتی یک توصیفگر هستش و اگر از دومی
استفاده کنید به شما یک اشاره گر به اون فایل رو بر می گردونه و در زمان
باید نحوه ی باز کردن اون رو هم مشخص کنید که برای خواندن هستش یا برای
نوشتن
ما نمی تونیم یک فایل رو هم برای خواندن و هم برای نوشتن باز کنید در این مورد استفاده از پایپ لاین نامدار.
برای
موردی هم که گفتم برای جلوگیری از block شدن یک پردازه در زمان باز شدن
برای خواندن از یک فلگ به نام O_NONBLOCK در زمان باز کردن اون فایل
استفاده می کنیم.
خوب امیدوارم چیزهای بدرد بخوری بوده باشه این مطالب موفق باشید.
اسلاید سیزدهم گرافیک دانلود
اسلاید شماره چهارده گرافیک دانلود
اسلاید شماره پانزده و شانزدهم گرافیک دانلود