PDA

نسخه کامل مشاهده نسخه کامل : ایجاد fork و pipe



آرام جان گل
10-03-2007, 10:20
سلام
من بايد برنامه اي در محيط لينوكس به زبان سي بنويسم
پروسس پدر بايد اي دي خود را در بافر بنويسد
واين برنامه بايد به چند تا پروسس فرزند اجازه دهد كه يكي يكي به يك بافر دست يابند و اي دي پدررا بخوانند
منبع معرفي شده به من لاتين است ونياز مند كمك افرادي هستم كه اطلاعات دارند
تا حدودي پيش رفته ام و كدي پيدا كرده ام كه فكر مي كنم به دردم مي خورد
ولي بعضي از خطوط را نمي فهمم
كد من اين است:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

آيا با تابع فورك fork فرايند پدر و فرزند با هم توليد مي شوند؟
چند تا فرايند فرزند توليد مي شوند؟
چطوري بيش از يك فرايند فرزند توليد كنم چون فرايند ها بايد يكي يكي به بافر دست يابند و انرا بخوانند؟
به اين كد چه چيزي اضافه كنم تا بعد از ساخت فرايند پدر اي دي پدر ارا در بافر بنويسد
چون اي دي از نوع عدد است آيا بافر را بايد از نوع عدد int تعريف كنم ايرادي پيش نمي ا يد؟
لطف مي كنيد درمورد خطوطي نوشته ام توضيح دهيد

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
از طریق زیر:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برنامه در حال پر کردن بافر است ولی من می خواهم که بافر با ای دی پدر پر شود چه کدی بنویسم و یا چه تغیییری ایجاد کنم که این کا ررابکند
تشکر

someone
11-03-2007, 02:40
دوباره سلام.
تابع fork ابتدایی ترین راه برای ایجاد یک process هست. وقتی از fork استفاده میکنین یک
child-process ایجاد میشه. البته به طور کاملتر باید بگم که current-process به دو process شکسته میشه.
به یک parent-process و یک child-process . میتونید از fork چند بار استفاده کنید.
با استفاده از تابع getppid میتونید parent-ID رو برگردونید.
بافر شما بهتره از نوع Integer باشه تا دچار مشکل نشید.

1-

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این کد محتویات buf رو به تعداد len در STDOUT_FILENO کپی میکنه و در حقیقت در خروجی نمایش میده.

2-

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این کد یک فایل رو در حالت Read-Only باز میکنه. [1]argv اسم فایل مورد نظر هست.که از cmd-line
دریافت میشه. اگه این تابع نتونه فایل مورد نظر رو باز کنه مقداری که برمیگردونه برابر -1 هست.

3-

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این کد باعث میشه برنامه تا تموم شدن کار child-process که pid هست صبرکنه.

4-

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

این کد به معنی هست: تا زمانی مقدار برگشتی تابع read بزرگتر از 0 باشه مقدار buf رو در [1]fd مینوسه.
در حقیقت اول از ورودی خونده میشه (fdin ) و در buf قرار داده میشه و بعد این مقدار در فایل [1]fd نوشته
میشه.