'\" t .\" Title: flock .\" Author: [see the "AUTHOR(S)" section] .\" Generator: Asciidoctor 2.0.26 .\" Date: 2026-06-16 .\" Manual: User Commands .\" Source: util-linux 2.41.5 .\" Language: Persian .\" .TH "FLOCK" "1" "2026-06-16" "util\-linux 2.41.5" "دستورهای کاربری" .ie \n(.g .ds Aq \(aq .el .ds Aq ' .ss \n[.ss] 0 .nh .ad l .de URL \fI\\$2\fP <\\$1>\\$3 .. .als MTO URL .if \n[.g] \{\ . mso www.tmac . am URL . ad l . . . am MTO . ad l . . . LINKSTYLE blue R < > .\} .SH "نام (NAME)" flock \- مدیریت قفل‌های پرونده در اسکریپت‌های پوسته .SH "خلاصه دستور (SYNOPSIS)" .sp \fBflock\fP [options] \fIfile\fP|\fIdirectory\fP \fIcommand\fP [\fIarguments\fP] .sp \fBflock\fP [options] \fIfile\fP|\fIdirectory\fP \fB\-c\fP \fIcommand\fP .sp \fBflock\fP [options] \fInumber\fP .SH "توضیحات (DESCRIPTION)" .sp این ابزار قفل‌های \fBflock\fP(2) را از درون اسکریپت‌های پوسته یا از خط فرمان مدیریت می‌کند. .sp حالت‌های اول و دوم از ساختارهای بالا، اجرای یک \fIcommand\fP را درون یک قفل قرار می‌دهند، به شیوه‌ای مشابه با \fBsu\fP(1) یا \fBnewgrp\fP(1). آن‌ها یک \fIfile\fP یا \fIdirectory\fP مشخص‌شده را قفل می‌کنند، که در صورت عدم وجود (با فرض دسترسی‌های مناسب) ایجاد می‌شود. به‌طور پیش‌فرض، اگر قفل فوراً به دست نیاید، \fBflock\fP منتظر می‌ماند تا قفل در دسترس قرار گیرد. .sp حالت سوم از یک پروندهٔ باز بر اساس \fInumber\fP توصیف‌گر پرونده (file descriptor) آن استفاده می‌کند. برای نحوهٔ استفاده از آن، مثال‌های زیر را ببینید. .SH "گزینه‌ها (OPTIONS)" .sp \fB\-c\fP, \fB\-\-command\fP \fIcommand\fP .RS 4 ارسال یک \fIcommand\fP منفرد، بدون آرگومان، به پوسته با \fB\-c\fP. .RE .sp \fB\-E\fP, \fB\-\-conflict\-exit\-code\fP \fInumber\fP .RS 4 وضعیت خروجی مورد استفاده هنگامی که گزینهٔ \fB\-n\fP فعال است و قفل متداخل وجود دارد، یا گزینهٔ \fB\-w\fP فعال است و مهلت زمانی به پایان می‌رسد. مقدار پیش‌فرض \fB1\fP است. مقدار \fInumber\fP باید در بازهٔ 0 تا 255 باشد. .RE .sp \fB\-F\fP, \fB\-\-no\-fork\fP .RS 4 پیش از اجرای \fIcommand\fP انشعاب (fork) ایجاد نمی‌کند. پس از اجرا، فرایند flock با \fIcommand\fP جایگزین می‌شود و همچنان قفل را نگه می‌دارد. این گزینه با \fB\-\-close\fP ناسازگار است، چرا که در غیر این صورت چیزی برای نگه‌داشتن قفل باقی نمی‌ماند. .RE .sp \fB\-e\fP, \fB\-x\fP, \fB\-\-exclusive\fP .RS 4 دریافت یک قفل انحصاری، که گاهی قفل نوشتن نامیده می‌شود. این حالت پیش‌فرض است. .RE .sp \fB\-n\fP, \fB\-\-nb\fP, \fB\-\-nonblock\fP .RS 4 در صورت عدم امکان دستیابی فوری به قفل، به جای انتظار، ناموفق می‌شود. برای وضعیت خروجی مورد استفاده، گزینهٔ \fB\-E\fP را ببینید. .RE .sp \fB\-o\fP, \fB\-\-close\fP .RS 4 بستن توصیف‌گر پرونده‌ای که قفل روی آن نگه داشته شده است پیش از اجرای \fIcommand\fP. این گزینه زمانی مفید است که \fIcommand\fP یک فرایند فرزند ایجاد می‌کند که نباید قفل را نگه دارد. .RE .sp \fB\-s\fP, \fB\-\-shared\fP .RS 4 دریافت یک قفل اشتراکی، که گاهی قفل خواندن نامیده می‌شود. .RE .sp \fB\-u\fP, \fB\-\-unlock\fP .RS 4 رهاسازی یک قفل. این کار معمولاً لازم نیست، زیرا با بسته شدن پرونده قفل به‌طور خودکار آزاد می‌شود. با این حال ممکن است در موارد خاصی مورد نیاز باشد، مثلاً اگر گروه دستورهای محصور فرایند پس‌زمینه‌ای ایجاد کرده باشد که نباید قفل را نگه دارد. .RE .sp \fB\-w\fP, \fB\-\-wait\fP, \fB\-\-timeout\fP \fIseconds\fP .RS 4 در صورتی که قفل ظرف \fIseconds\fP ثانیه به دست نیاید، ناموفق می‌شود. مقادیر کسری اعشاری مجاز هستند. برای وضعیت خروجی مورد استفاده، گزینهٔ \fB\-E\fP را ببینید. مقدار صفر \fIseconds\fP به صورت \fB\-\-nonblock\fP تفسیر می‌شود. .RE .sp \fB\-\-fcntl\fP .RS 4 به جای flock(2)، یک قفل توصیف پروندهٔ باز fcntl(2) اعمال می‌کند (یعنی استفاده از دستورهای F_OFD_SETLK (غیرمسدودکننده) یا F_OFD_SETLKW (مسدودکننده)). این قفل‌ها مستقل از قفل‌های اعمال‌شده از طریق flock(2) هستند، اما بر خلاف قفل‌های سنتی POSIX fcntl() (شامل F_SETLK و F_SETLKW)، معنایی مطابق با flock(2) دارند. .RE .sp این قابلیت تنها در نگارش‌های هسته >= 3.15 در دسترس است. .sp \fB\-\-verbose\fP .RS 4 گزارش مدت زمانی که به دست آوردن قفل طول کشید، یا دلیل عدم دستیابی به قفل. .RE .sp \fB\-h\fP, \fB\-\-help\fP .RS 4 نمایش متن راهنما و خروج. .RE .sp \fB\-V\fP, \fB\-\-version\fP .RS 4 نمایش نگارش و خروج. .RE .SH "وضعیت خروج (EXIT STATUS)" .sp این دستور برای همه چیز از مقادیر وضعیت خروج استفاده می‌کند، به جز هنگام استفاده از هر یک از گزینه‌های \fB\-n\fP یا \fB\-w\fP که عدم موفقیت در به دست آوردن قفل را با وضعیت خروجی تعیین‌شده توسط گزینهٔ \fB\-E\fP، یا مقدار پیش‌فرض 1 گزارش می‌دهند. وضعیت خروجی داده‌شده با \fB\-E\fP باید در بازهٔ 0 تا 255 باشد. .sp هنگام استفاده از حالت \fIcommand\fP، اگر اجرای فرایند فرزند موفق باشد، وضعیت خروجی همان وضعیت خروجی دستور فرزند است. .SH "نکات (NOTES)" .sp دستور \fBflock\fP بن‌بست (deadlock) را تشخیص نمی‌دهد. برای جزئیات به \fBflock\fP(2) مراجعه کنید. .sp برخی سامانه‌های پرونده (مانند NFS و CIFS) پیاده‌سازی محدودی از \fBflock\fP(2) دارند و ممکن است flock همیشه با شکست مواجه شود. برای جزئیات به \fBflock\fP(2)، \fBnfs\fP(5) و \fBmount.cifs\fP(8) مراجعه کنید. بسته به گزینه‌های mount، ممکن است flock در آنجا همیشه ناموفق باشد. .SH "مثال‌ها (EXAMPLES)" .sp توجه داشته باشید که "shell> " در مثال‌ها اعلان خط فرمان است. .sp shell1> flock /tmp \-c cat; shell2> flock \-w .007 /tmp \-c echo; /bin/echo $? .RS 4 تنظیم قفل انحصاری روی دایرکتوری \fI/tmp\fP و دستور دوم با شکست مواجه خواهد شد. .RE .sp shell1> flock \-s /tmp \-c cat; shell2> flock \-s \-w .007 /tmp \-c echo; /bin/echo $? .RS 4 تنظیم قفل اشتراکی روی دایرکتوری \fI/tmp\fP و دستور دوم ناموفق نخواهد شد. توجه داشته باشید که تلاش برای دریافت قفل انحصاری با دستور دوم شکست خواهد خورد. .RE .sp shell> flock \-x local\-lock\-file echo \*(Aqa b c\*(Aq .RS 4 دریافت قفل انحصاری "local\-lock\-file" پیش از اجرای echo با \*(Aqa b c\*(Aq. .RE .sp (; flock \-n 9 || exit 1; # .\|.\|. commands executed under lock .\|.\|.; ) 9>/var/lock/mylockfile .RS 4 این ساختار در اسکریپت‌های پوسته بسیار مناسب است. حالت مورد استفاده برای باز کردن پرونده برای \fBflock\fP تفاوتی ندارد؛ استفاده از \fI>\fP یا \fI>>\fP اجازه می‌دهد پروندهٔ قفل در صورت عدم وجود ایجاد شود، هرچند دسترسی نوشتن لازم است. استفاده از \fI<\fP مستلزم وجود پرونده از قبل است، اما فقط به دسترسی خواندن نیاز دارد. .RE .sp [ "${FLOCKER}" != "$0" ] && exec env FLOCKER="$0" flock \-en "$0" "$0" "$@" || : .RS 4 این یک الگوی کد آماده برای اسکریپت‌های پوسته است. آن را در بالای اسکریپت پوسته‌ای که می‌خواهید قفل شود قرار دهید تا در اولین اجرا به‌طور خودکار خودش را قفل کند. اگر متغیر محیطی \fB$FLOCKER\fP روی اسکریپت پوسته‌ای که در حال اجرا است تنظیم نشده باشد، \fBflock\fP را اجرا کرده و یک قفل انحصاری غیرمسدودکننده دریافت می‌کند (با استفاده از خود اسکریپت به عنوان پروندهٔ قفل) پیش از آنکه با آرگومان‌های مناسب دوباره خودش را اجرا کند. همچنین متغیر محیطی \fBFLOCKER\fP را روی مقدار مناسب قرار می‌دهد تا مجدداً اجرا نشود. .RE .sp shell> exec 4<>/var/lock/mylockfile; shell> flock \-n 4 .RS 4 این ساختار برای قفل کردن یک پرونده بدون ایجاد زیرفرایند مناسب است. پوسته پروندهٔ قفل را برای خواندن و نوشتن به عنوان توصیف‌گر پروندهٔ 4 باز می‌کند، سپس از \fBflock\fP برای قفل کردن توصیف‌گر استفاده می‌شود. .RE .SH "نویسندگان (AUTHORS)" .sp .MTO "hpa\(atzytor.com" "H. Peter Anvin" "" .SH "حق نشر (COPYRIGHT)" .sp Copyright © 2003\-2006 H. Peter Anvin. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. .SH "همچنین ببینید (SEE ALSO)" .sp \fBflock\fP(2), \fBfcntl\fP(2) .SH "گزارش باگ‌ها (REPORTING BUGS)" .sp برای گزارش باگ‌ها از \c .URL "https://github.com/util\-linux/util\-linux/issues" "ردیاب مشکلات" "." .SH "دسترسی (AVAILABILITY)" .sp دستور \fBflock\fP بخشی از بستهٔ util\-linux است که می‌توان آن را از \c .URL "https://www.kernel.org/pub/linux/utils/util\-linux" "بایگانی هسته لینوکس" "."