posix --- رایج‌ترین فراخوانی‌های سیستمی POSIX


این ماژول دسترسی به قابلیت‌های سیستم‌عاملی را فراهم می‌کند که توسط استاندارد C و استاندارد POSIX (یک رابط Unix با پوششی بسیار نازک) استاندارد شده‌اند.

این ماژول را به‌صورت مستقیم ایمپورت نکنید. در عوض، ماژول os را ایمپورت کنید، که نسخه‌ای قابل‌حمل از این رابط ارائه می‌دهد. در یونیکس، ماژول os ابرمجموعه‌ای از رابط posix را ارائه می‌دهد. در سیستم‌عامل‌های غیر یونیکسی، ماژول posix در دسترس نیست، اما زیرمجموعه‌ای همیشه از طریق رابط os در دسترس است. پس از ایمپورت شدن os، استفاده از آن به جای posix هیچ جریمه‌ای از نظر کارایی ندارد. علاوه بر این، os برخی قابلیت‌های اضافی را ارائه می‌دهد، مانند فراخوانی خودکار putenv() هرگاه یک ورودی در os.environ تغییر کند.

خطاها به‌صورت استثنا گزارش می‌شوند؛ برای خطاهای نوعی، استثناهای معمول داده می‌شوند، در حالی که خطاهای گزارش‌شده از سوی فراخوانی‌های سیستم، OSError را پرتاب می‌کنند.

پشتیبانی از پرونده‌های بزرگ

چندین سیستم‌عامل (از جمله AIX و Solaris) پشتیبانی از پرونده‌هایی که بزرگ‌تر از ۲ GiB هستند را از طریق یک مدل برنامه‌نویسی C که در آن int و long مقادیر ۳۲‌بیتی هستند، فراهم می‌کنند. این کار معمولاً با تعریف نوع‌های مرتبط با اندازه و آفست به‌عنوان مقادیر ۶۴‌بیتی انجام می‌شود. به چنین پرونده‌هایی گاهی پرونده‌های بزرگ <large files> گفته می‌شود.

پشتیبانی از پرونده‌های بزرگ زمانی در پایتون فعال می‌شود که اندازه‌ی یک off_t بزرگ‌تر از یک long باشد و long long حداقل به اندازه‌ی یک off_t بزرگ باشد. ممکن است لازم باشد پایتون را با پرچم‌های خاصی از کامپایلر پیکربندی و کامپایل کنید تا این حالت فعال شود. برای مثال، در Solaris 2.6 و 2.7 باید کاری مانند زیر انجام دهید:

CFLAGS="`getconf LFS_CFLAGS`" OPT="-g -O2 $CFLAGS" \
        ./configure

در سیستم‌های لینوکسی با قابلیت پشتیبانی از پرونده‌های بزرگ، ممکن است این کار کند:

CFLAGS='-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64' OPT="-g -O2 $CFLAGS" \
        ./configure

محتویات قابل‌توجه ماژول

علاوه بر بسیاری از توابعی که در مستندات ماژول os توضیح داده شده‌اند، posix آیتم داده‌ی زیر را تعریف می‌کند:

posix.environ

دیکشنری‌ای که نشان‌دهنده‌ی محیط رشته‌ای در زمان آغاز مفسر است. کلیدها و مقادیر در یونیکس از نوع bytes و در ویندوز از نوع str هستند. برای مثال، environ[b'HOME'] (در ویندوز environ['HOME']) نام مسیر پوشه‌ی خانگی شماست که معادل getenv("HOME") در C است.

تغییر این دیکشنری بر محیطی که به‌صورت رشته توسط execv()، popen() یا system() منتقل می‌شود، تأثیری نمی‌گذارد؛ اگر نیاز به تغییر محیط دارید، environ را به execve() بدهید یا انتساب‌های متغیر و دستورهای export را به رشته‌ی فرمان برای system() یا popen() اضافه کنید.

تغییر یافته در نسخه‌ی 3.2: در یونیکس، کلیدها و مقادیر بایت هستند.

توجه

ماژول os یک پیاده‌سازی جایگزین از environ ارائه می‌دهد که در صورت تغییر، محیط را به‌روزرسانی می‌کند. همچنین توجه داشته باشید که به‌روزرسانی os.environ این دیکشنری را منسوخ خواهد کرد. توصیه می‌شود به‌جای دسترسی مستقیم به ماژول posix، از نسخه‌ی این مورد در ماژول os استفاده کنید.