SYD-OFD(1) General Commands Manual SYD-OFD(1)

syd-ofd - دریافت قفل روی فایل و سپس اجرای برنامهای دیگر

syd-ofd [-n | -N] [-t timeout] [-d fd] [-s=-r | -x=-w] file {command [arg...]}

ابزار syd-ofd یک قفل روی یک فایل دریافت می‌کند و سپس برنامه‌ای دیگر را اجرا می‌نماید. این ابزار از نظر عملکردی مشابه ابزار s6-setlock(1) است، با این تفاوت که از قفل‌های OFD که در استاندارد POSIX 2024 جدید هستند استفاده می‌کند. این نوع قفل همچنین با عنوان «قفل‌های اختصاصی فایل» (file-private locks) شناخته می‌شود و به جای مبتنی بودن بر فرآیند (مانند قفل‌های سنتی POSIX که s6-setlock(1) استفاده می‌کند)، مبتنی بر شرح فایل باز (open file description) است. این ویژگی به syd(1) اجازه می‌دهد توصیف‌گر فایل را به فرآیند سندباکس منتقل کند و نسخه خود را ببندد در حالی که فرآیند سندباکس همچنان قفل را نگه داشته است؛ امری که با قفل‌های سنتی و ابزار s6-setlock(1) امکان‌پذیر نبود.

-h نمایش راهنما.
-n قفل غیرمسدودکننده (Nonblocking lock). اگر syd-ofd نتواند قفل را دریافت کند، فوراً با کد ۱۱ («EAGAIN»: دوباره تلاش کنید) خارج می‌شود.
-N قفل مسدودکننده (Blocking lock). ابزار syd-ofd تا زمانی که بتواند قفل را دریافت کند منتظر می‌ماند. این حالت پیش‌فرض است.
-t timeout قفل زمان‌دار (Timed lock). اگر syd-ofd نتواند پس از timeout میلی‌ثانیه قفل را دریافت کند، با کد ۴ («EINTR»: فراخوانی سیستمی متوقف شد) خارج می‌شود.
-s=-r قفل مشترک (Shared lock). سایر قفل‌های مشترک روی همان فایل مانع از دریافت قفل نخواهند شد (اما یک قفل انحصاری مانع خواهد شد).
گزینه -r برای سازگاری با ابزار s6-setlock(1) حفظ شده است.
-x=-w قفل انحصاری (Exclusive lock). این حالت پیش‌فرض است.
گزینه -w برای سازگاری با ابزار s6-setlock(1) حفظ شده است.
-d fd قفل را در برنامه روی توصیف‌گر فایل fd قابل مشاهده می‌کند.

در صورت خروج تمیز، syd-ofd با همان کد خروج فرآیند فرزند خارج می‌شود. در صورت خاتمه غیرعادی، کد خروج برابر با ۱۲۸ به‌علاوه شماره سیگنال خواهد بود. در صورتی که اجرای فرآیند فرزند با شکست مواجه شود، syd-ofd با شماره errno(3) خارج می‌شود.

ابزار syd-ofd هنگام باز کردن یا ایجاد فایل قفل از فراخوانی openat(2) به همراه فلگ‌های تفکیک RESOLVE_NO_MAGICLINKS و RESOLVE_NO_SYMLINKS استفاده می‌کند. در نتیجه، اگر هر بخشی از مسیر مشخص‌شده یک پیوند نمادین (symbolic link) باشد، فراخوانی شکست خورده و کد خطای ۴۰ (ELOOP: «پیوندهای نمادین بیش از حد») را بازمی‌گرداند. به همین ترتیب، وجود هرگونه مؤلفه .. (دونقطه / دایرکتوری والد) در مسیر فایل قفل باعث شکست فراخوانی و بازگرداندن کد خطای ۱۳ (EACCES: «عدم دسترسی / Permission denied») می‌شود. این محدودیت برای کاهش آسیب‌پذیری‌های وکیل فریب‌خورده (confused-deputy) در حین ایجاد فایل قفل و عملیات مرتبط با فایل طراحی شده است؛ به این صورت که از تغییر مسیر عملیات توسط واسطه‌ها یا عامل‌های با دسترسی کمتر از طریق پیوندهای نمادین یا مؤلفه‌های دایرکتوری والد (..) به یک مکان ناخواسته در سیستم فایل جلوگیری می‌کند.

syd(1), syd(2), syd(5), syd-lock(1), syd-mdwe(1), syd-pds(1), syd-ring(1), syd-sec(1), syd-tsc(1), s6-setlock(1), fcntl(2), F_OFD_SETLKW(2const), openat2(2)

توسعه و نگهداری توسط Ali Polatel. کدهای منبع به‌روز را می‌توانید در https://gitlab.exherbo.org/sydbox/sydbox.git و در Radicle در rad:z38HCnbmcDegA2BMxuPaPRPMdp6wF بیابید. گزارش‌های اشکال و وصله‌ها را می‌توان به https://gitlab.exherbo.org/groups/sydbox/-/issues ارسال کرد. گفتگو و تبادل نظر در کانال #sydbox در Libera Chat یا در #sydbox:mailstation.de در Matrix.

2026-09-01