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

محتوای حذف‌شده محتوای افزوده‌شده
FreshmanBot (بحث | مشارکت‌ها)
جز اصلاح فاصله مجازی + اصلاح نویسه با استفاده از AWB
Xqbot (بحث | مشارکت‌ها)
جز Bot: Replace deprecated <source> tag and "enclose" parameter [https://lists.wikimedia.org/pipermail/wikitech-ambassadors/2020-April/002284.html]
خط ۱:
در [[سیستم‌عامل]]‌های [[شبه یونیکس]] یک '''خط لوله''' معادل همان مفهوم کلی [[نرم‌افزار خط لوله|خط لوله نرم‌افزار]] است. این مفهوم به تعدادی [[فرآیند|پروسه]] اشاره دارد که به صورت زنجیر وار به یکدیگر متصل هستند. به این صورت که [[خروجی استاندارد]] یک فرآیند به [[ورودی استاندارد]] فرآیندی بعدی متصل است و به همین ترتیب. هر اتصال به وسیله یک [[لوله ناشناس]] پیاده‌سازی شده‌است. این ایده در ابتدا توسط [[داگلاس مکیلروی]] ابداع شد و در حقیقت تمثیلی از یک [[خط لوله انتقال]] واقعیست. این ایده به سرعت پذیرفته شد و جزء یکی از ارکان اصلی [[فلسفه یونیکس]] درآمد. مفهوم لوله‌کشی فرآیند‌ها در زیر نشان داده شده‌است. خط اول حالت کلی و انتزاعی را نشان می‌دهد و خط دوم هم یک مثال واقعی از اتصال سه برنامه ls, grep و more را نشان می‌دهد.
 
<sourcesyntaxhighlight lang="bash">
program1 | program2 | program3
ls -l | grep key | more
</syntaxhighlight>
</source>
{{-}}
[[تصویر:Pipeline.svg|انگشتی|چپ|یک لوله‌کشی از سه برنامه که بر روی یک ترمینال متنی اجرا می‌شوند.]]
خط ۱۷:
لوله‌ها توسط فراخوان سیستمی pipe(){{چر}} ایجاد می‌شوند. این فراخوان در [[فایل سرآیند]] unistd.h به شکل زیر تعریف شده است:
{{-}}
<sourcesyntaxhighlight lang="c">
int pipe(int fildes[2]);
</syntaxhighlight>
</source>
 
این فراخوان سیستمی، یک آرایه دو عنصری از اعداد صحیح دریافت می‌کند و هر عنصر را به یک [[توصیف‌گر فایل]] اختصاص می‌دهد. عنصر اول آرایه مخصوص خواندن اطلاعات و عنصر دوم آرایه مخصوص نوشتن اطلاعات است. هر چیزی که در عنصر دوم نوشته شود در عنصر اول قابل خواندن است. معمولاً کار با لوله‌ها به این صورت انجام می‌شود که یک فرآیند به کمک fork(){{چر}} [[انشعاب (سیستم‌عامل)|انشعابی]] از خودش ایجاد می‌کند و به این صورت دو فرآیند مشابه ایجاد می‌شود که یکی فرزند و دیگری والد است و این فرآیند‌ها هر کدام ورودی/خروجی استاندارد خود را دارند. حال یکی از فرآیند‌ها ورودی استاندارد و فرآیند دیگر خروجی استاندارد خود را می‌بندند و سپس انتقال اطلاعات از طریق ورودی/خروجی دیگر صورت می‌پذیرد. مثال زیر این موضوع را نشان می‌دهد:
 
<sourcesyntaxhighlight lang="c">
int pdes[2];
خط ۴۴:
write( pdes[1]); /* write to child */
}
</syntaxhighlight>
</source>
 
== منابع ==