کتابخانه‌ی استاندارد · سیستم و ابزار

موقت os/temp

ساختن پرونده و پوشه‌ی موقت با نام یکتا.

واردسازی سیستم عامل.موقت

برای داده‌ای که فقط در طول اجرای برنامه لازم است، پرونده یا پوشه‌ی موقت بسازید: بایگانیِ بازشده، پرونده‌ای که پیش از انتشار ساخته می‌شود، خروجی یک ابزار. پرونده موقت و پوشه موقت یکی خالی در پوشه‌ی موقت سیستم با نامی تصادفی (salam- و ۱۶ رقم شانزده‌شانزدهی از بسته‌ی رمزنگاری) می‌سازند و مسیرش را برمی‌گردانند، پس چند نسخه‌ی هم‌زمان برنامه با هم تداخل ندارند. پاک کردن با خودتان است: هنگام پایان برنامه چیزی پاک نمی‌شود.

پرونده‌ها را با بسته‌ی پرونده بخوانید و بنویسید و مسیرهای درون پوشه‌ی موقت را با بسته‌ی مسیر بسازید. برای جایگزین کردن امن یک پرونده‌ی واقعی، پرونده.نوشتن اتمی اغلب ابزار بهتری است.

اشتباه‌های رایج:

  • بررسی نکردن پوشه موقت. اگر شکست بخورد متن خالی برمی‌گرداند و پیوستن مسیر به "" بعداً در پوشه‌ی جاری می‌نویسد.
  • اعتماد چشم‌بسته به پرونده موقت. همیشه مسیری برمی‌گرداند، حتی وقتی پرونده ساخته نشده، و اول پرونده را می‌سازد و بلافاصله پس از آن مجوزهایش را تنگ می‌کند، پس لحظه‌ای مجوزهای پیش‌فرض را دارد. برای رازها یک پوشه موقت بسازید (فقط خودتان می‌توانید واردش شوید) و پرونده‌ها را درون آن بسازید.
  • بیرون بردن پرونده‌ی آماده با تغییر نام. پوشه‌ی موقت اغلب روی دیسک دیگری است و تغییر نام آن‌جا شکست می‌خورد؛ به‌جایش رونوشت بگیرید.

پوشه‌ی کار برای یک کار

الگوی رایج سه خط است: با پوشه موقت پوشه‌ای بسازید، درست زیرش دیرکن موقت.حذف پوشه(کارگاه) بنویسید و هر مسیری را که درون آن لازم دارید با مسیر.پیوند بسازید. فراخوانی دیرکرده در هر راه خروج از تابع اجرا می‌شود، حتی با یک برگشت زودهنگام، پس پوشه هر طور که کار تمام شود پاک می‌شود. اگر پوشه موقت نتواند پوشه را بسازد رشته‌ی خالی برمی‌گرداند؛ پیش از استفاده این را بررسی کنید.

os-temp-scratch.salam
واردسازی سیستم پرونده.پوشه
واردسازی سیستم پرونده.پرونده
واردسازی سیستم پرونده.مسیر
واردسازی سیستم عامل.موقت

تابع ریشه:
    کارگاه := موقت.پوشه موقت()
    اگر کارگاه == "":
        سرچاپ "پوشه‌ی کار ساخته نشد"
        برگشت ۱
    پایان
    دیرکن موقت.حذف پوشه(کارگاه)
    پرونده.نوشتن متن(مسیر.پیوند(کارگاه، "تکه ۱.txt")، "سلام ")
    پرونده.نوشتن متن(مسیر.پیوند(کارگاه، "تکه ۲.txt")، "دنیا\n")
    ناپایا متن کامل := ""
    هر نام در ["تکه ۱.txt"، "تکه ۲.txt"]:
        متن کامل = متن کامل + پرونده.خواندن متن(مسیر.پیوند(کارگاه، نام))
    پایان
    چاپ متن کامل
    سرچاپ پوشه.فهرست پرونده ها(کارگاه).طول()، "تکه،"، پوشه.اندازه(کارگاه)، "بایت"
    برگشت ۰
پایان
خروجیسلام دنیا 2 تکه، 18 بایت

ساختن پرونده در چند مرحله و انتشار آن

وقتی پرونده‌ای در چند مرحله نوشته می‌شود، اول آن را در یک پرونده‌ی موقت بنویسید و فقط وقتی کامل شد به نام اصلی‌اش رونوشت کنید. این‌طور کسی که افراد.csv را می‌خواند هیچ‌وقت نیمی از آن را نمی‌بیند. این‌جا پرونده.کپی را به کار ببرید نه پرونده.جابجایی را: پوشه‌ی موقت اغلب روی دیسک دیگری است (در بسیاری از لینوکس‌ها یک tmpfs در حافظه) و تغییر نام نمی‌تواند از یک دیسک به دیسک دیگر برود.

os-temp-staging.salam
واردسازی سیستم پرونده.پرونده
واردسازی سیستم عامل.موقت

تابع ریشه:
    پیش نویس := موقت.پرونده موقت()
    پرونده.افزودن(پیش نویس، "شناسه,نام\n")
    پرونده.افزودن(پیش نویس، "1,سارا\n")
    پرونده.افزودن(پیش نویس، "2,رضا\n")
    سطرها := پرونده.خواندن خط‌ها(پیش نویس)
    سرچاپ سطرها.طول()، "خط آماده شد"
    اگر پرونده.کپی(پیش نویس، "افراد.csv") == ۰:
        سرچاپ "افراد.csv منتشر شد،"، پرونده.اندازه("افراد.csv")، "بایت"
    پایان
    موقت.حذف(پیش نویس)
    سرچاپ "پیش‌نویس باقی ماند:"، پرونده.وجود دارد(پیش نویس)
    چاپ پرونده.خواندن متن("افراد.csv")
    پرونده.حذف("افراد.csv")
پایان
خروجی3 خط آماده شد افراد.csv منتشر شد، 38 بایت پیش‌نویس باقی ماند: false شناسه,نام 1,سارا 2,رضا

اگر همه‌ی محتوا یک‌جا در یک رشته آماده است، پرونده.نوشتن اتمی ساده‌تر است: رونوشت موقت را کنار پرونده‌ی مقصد و روی همان دیسک می‌نویسد و در یک گام جایگزینش می‌کند.

چه کسی پرونده‌ی موقت را می‌خواند

پوشه‌ی موقت سیستم میان همه‌ی حساب‌های کاربری دستگاه مشترک است. برای همین پرونده موقت پرونده را فقط برای شما خواندنی و نوشتنی می‌سازد (600) و پوشه موقت پوشه را فقط به روی شما باز می‌کند (700). توکن یا سندی که آن‌جا بگذارید از دسترس کاربران دیگر دور می‌ماند. همین را نگه دارید و فقط وقتی حساب دیگری واقعاً باید پرونده را بخواند، مجوز را با سیستم پرونده.تغییر مجوز باز کنید.

os-temp-permissions.salam
واردسازی سیستم پرونده
واردسازی سیستم عامل.موقت

تابع ریشه:
    رمز := موقت.پرونده موقت()
    کارگاه := موقت.پوشه موقت()
    سرچاپ "پرونده:"، سیستم پرونده.مجوزها(رمز)
    سرچاپ "پوشه:"، سیستم پرونده.مجوزها(کارگاه)
    موقت.حذف(رمز)
    موقت.حذف پوشه(کارگاه)
پایان
خروجیپرونده: 600 پوشه: 700

خطاها، و این‌که پرونده‌ها کجا می‌روند

حذف و حذف پوشه در صورت موفقیت 0 و در صورت شکست -1 برمی‌گردانند و یک خطای ورودی خروجی در خطا ثبت می‌کنند. پیام‌ها انگلیسی‌اند. رایج‌ترین شکست، حذف دوباره‌ی یک پرونده است. حذف پوشه روی پوشه‌ای که از قبل رفته، موفقیت حساب می‌شود.

os-temp-errors.salam
واردسازی سیستم عامل.خطا
واردسازی سیستم عامل.موقت

تابع ریشه:
    پ := موقت.پرونده موقت()
    سرچاپ "حذف اول:"، موقت.حذف(پ)
    خطا.پاک کردن خطا()
    سرچاپ "حذف دوم:"، موقت.حذف(پ)
    اگر خطا.خطا دارد():
        سرچاپ "پیام:"، خطا.پیام آخرین خطا()
        سرچاپ "خطای ورودی خروجی است:"، خطا.کد آخرین خطا() == خطا.خطای ورودی خروجی
    پایان
پایان
خروجیحذف اول: 0 حذف دوم: -1 پیام: failed to remove temp file خطای ورودی خروجی است: true

پرونده‌ها در پوشه‌ای ساخته می‌شوند که سیستم عامل.پوشه موقت می‌گوید: متغیر محیطی TEMP، TMP یا TMPDIR به همین ترتیب، و اگر هیچ‌کدام نبود /tmp. با پایان برنامه چیزی آن‌ها را پاک نمی‌کند و برنامه‌ای که از کار بیفتد آن‌ها را جا می‌گذارد؛ پس سرویسی که مدت‌ها اجرا می‌شود بهتر است برای هر کار پوشه‌ی جدا بسازد و در پایان همان کار پاکش کند. نام‌ها تصادفی‌اند (salam- و چند رقم شانزده‌شانزدهی)، پس هرگز آن‌ها را با هم مقایسه نکنید و در خروجی‌ای که بعداً کسی می‌خواند نشانشان ندهید.

تابع‌ها

پرونده موقت File

تابع پرونده موقت(): رشته
یک پرونده‌ی خالی با نام salam- به‌علاوه‌ی ۱۶ رقم شانزده‌شانزدهی تصادفی و .tmp در پوشه‌ی موقت سیستم می‌سازد، مجوزش را 600 می‌کند و مسیرش را برمی‌گرداند. حتی اگر ساختن شکست بخورد مسیر را برمی‌گرداند.
os-temp-File.salam
واردسازی سیستم عامل
واردسازی سیستم عامل.موقت

تابع ریشه:
    پ := موقت.پرونده موقت()
    سرچاپ سیستم عامل.وجود دارد(پ)
    موقت.حذف(پ)
    سرچاپ سیستم عامل.وجود دارد(پ)
    د := موقت.پوشه موقت()
    سرچاپ سیستم عامل.پوشه است(د)
    موقت.حذف پوشه(د)
    سرچاپ سیستم عامل.وجود دارد(د)
پایان
خروجیtrue false true false

پوشه موقت Directory

تابع پوشه موقت(): رشته
یک پوشه‌ی خالی با نام یکتا و مجوز 700 می‌سازد و مسیرش را برمی‌گرداند، یا اگر نتواند متن خالی (همراه با ثبت در خطا).

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-temp-File.salam

حذف Remove

تابع حذف(p: رشته): صحیح
پرونده‌ی موقت را پاک می‌کند؛ در صورت موفقیت ۰ و در صورت شکست -۱ همراه با ثبت در خطا.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-temp-File.salam

حذف پوشه RemoveDir

تابع حذف پوشه(p: رشته): صحیح
پوشه‌ی موقت را با همه‌ی محتوایش با حذف همهی سیستم عامل پاک می‌کند؛ در صورت موفقیت یا وقتی پوشه از قبل رفته ۰، و در صورت شکست -۱. مثل همان تابع، پیوندهای نمادین به پوشه را دنبال می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-temp-File.salam