لوله‌کشی (یونیکس): تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
Hd.fakhredanesh (بحث | مشارکت‌ها)
بدون خلاصۀ ویرایش
FreshmanBot (بحث | مشارکت‌ها)
جز اصلاح فاصله مجازی + اصلاح نویسه با استفاده از AWB
خط ۱:
در [[سیستم‌عامل]] های‌های [[شبه یونیکس]] یک '''خط لوله''' معادل همان مفهوم کلی [[نرم‌افزار خط لوله|خط لوله نرم‌افزار]] است. این مفهوم به تعدادی [[فرآیند|پروسه]] اشاره دارد که به صورت زنجیر وار به یکدیگر متصل هستند. به این صورت که [[خروجی استاندارد]] یک فرآیند به [[ورودی استاندارد]] فرآیندی بعدی متصل است و به همین ترتیب. هر اتصال به وسیله یک [[لوله ناشناس]] پیاده‌سازی شده استشده‌است. این ایده در ابتدا توسط [[داگلاس مکیلروی]] ابداع شد و در حقیقت تمثیلی از یک [[خط لوله انتقال]] واقعیست. این ایده به سرعت پذیرفته شد و جزء یکی از ارکان اصلی [[فلسفه یونیکس]] درآمد. مفهوم لوله‌کشی فرآیند‌ها در زیر نشان داده شده استشده‌است. خط اول حالت کلی و انتزاعی را نشان می‌دهد و خط دوم هم یک مثال واقعی از اتصال سه برنامه ls, grep و more را نشان می‌دهد.
 
<source lang="bash">
خط ۸:
[[تصویر:Pipeline.svg|انگشتی|چپ|یک لوله‌کشی از سه برنامه که بر روی یک ترمینال متنی اجرا می‌شوند.]]
 
همانطور که مشاهده می‌کنید، اتصالات از طریق ''کاراکتر لوله'' (|) برقرار شده استشده‌است. در مثال بالا، ابتدا ls لیست تمام فایل‌های موجود را از طریق خروجی استاندارد برای دستور grep ارسال می‌کند. دستور grep هم اطلاعات را از [[ورودی استاندارد]] خود می‌خواند و تمام خطوطی که حاوی کلمه key هستند را پیدا کرده و برای دستور more ارسال می‌کند. دستور more هم خروجی را صفحه‌بندی کرده و در خروجی استاندارد خود (نمایشگر) چاپ می‌کند.
 
خط لوله یونیکس را می‌توان مشابه [[عبارت میانوندی|عبارات میانوندی]] در نظر گرفت که [[عملوند]] ها‌ها برنامه‌ها هستند و [[عملگر]] ها‌ها هم کاراکتر | (pipe) هستند.
 
شاید در نگاه اول اینطور به نظر برسد که برنامه‌ها یکی پس از دیگری و از چپ به راست اجرا می‌شوند، اما در حقیقت اینگونه نیست و تمام برنامه‌ها به صورت همزمانهم‌زمان شروع به اجرا شدن می‌کنند و ورودی/خروجی‌های آنهاآن‌ها به شکل مناسبی به هم متصل شده استشده‌است.
 
== فراخوان‌های سیستمی ==
خط ۲۱:
</source>
 
این فراخوان سیستمی، یک آرایه دو عنصری از اعداد صحیح دریافت می‌کند و هر عنصر را به یک [[توصیف‌گر فایل]] اختصاص می‌دهد. عنصر اول آرایه مخصوص خواندن اطلاعات و عنصر دوم آرایه مخصوص نوشتن اطلاعات است. هر چیزی که در عنصر دوم نوشته شود در عنصر اول قابل خواندن است. معمولامعمولاً کار با لوله‌ها به این صورت انجام می‌شود که یک فرآیند به کمک fork(){{چر}} [[انشعاب (سیستم‌عامل)|انشعابی]] از خودش ایجاد می‌کند و به این صورت دو فرآیند مشابه ایجاد می‌شود که یکی فرزند و دیگری والد است و این فرآیند‌ها هر کدام ورودی/خروجی استاندارد خود را دارند. حال یکی از فرآیند‌ها ورودی استاندارد و فرآیند دیگر خروجی استاندارد خود را می‌بندند و سپس انتقال اطلاعات از طریق ورودی/خروجی دیگر صورت می‌پذیرد. مثال زیر این موضوع را نشان می‌دهد:
 
<source lang="c">