انجمنهای فارسی اوبونتو
جامعه کاربران => کافه اوبونتو => نویسنده: sajadspeed در 19 خرداد 1401، 12:41 قظ
-
سلام بزرگواران، به شکل اتفاقی به یک مورد تقریبا عجیبی برخورد کردم، حداقل برای خودم. یک ویدئو در حال پخش بود، حواسم نبود اسمش عوض کردم و در کمال تعجب این اجازه را به من داد :(
مگه منطقا نباید بگه این فایل باز و نمیتونه اونو Move کنه؟ یا به قول معروف تغییر نام بده؟
چجوری عمل میشه نکنه کل فیلم توی رم نگه میداره؟ شدنی نیست اصلا، یا temp میگیره از فایل؟
-
اگه تو ویندوز بود . مثلا برای حذف یک چیز یا کات کردنش یا ... اگه اون چیزه در حال اجراع بود خطا میداد که این برنامه در حال اجراست و سعی مجدد و ...
-
خوب برادر همین دیگه، به نظر من منطقش هم همینه، چون اصلا آدرس اون فایل تغییر پیدا میکنه و همه چی میریزه به هم، توی لینوکس میخوام بدون به چه شکل داره عمل میشه.
-
خب این برنامه نیست که!
اون توی کش خودش لود میکنه و از کش میخونه
بیشتر مدیا پلیر ها همینن وگرنه خیلی از قابلیت های پخش ویدیو رو نداشتیم
البته بستگی به لوکیشن هم داره
مثلا فایل های که از گوشی یا از دوربین باز میشن توی حالت طبیعی داخل tmp کش میشن و اجرا میشن
-
سلام،
الان که امتحان کردم، inode پرونده بعد از تغییر نام تغییر نکردش. شاید بر اون اساس پرونده رو اجرا میکنن.
یه بار هنگام پخش یه فیلم اونو جابجا کنید، ببینید بازم همینطوره. اینم امتحان کردم، و بازم inode پرونده تغییر نکرد.
میتونید inode پروندهها رو با «$ ls -lai $FILE» ببینید
-
شاید الان نمایش میده بعدا اعمال می کنه ؟ فکر نمیکنم احتمالا اصلا براش مهم نیست چون داره محتویاتش رو میخونه و به اسمش کار نداره
-
این چیزها می تونن خیلی عمیق باشن. منظورم اینه که جواب این سوال ها می تونه شما رو به کد کرنل راهنمایی کنه. اتفاقا این سوال خیلی خوبیه و من یه جایی نوشتمش که اگر وقت شد بررسی دقیق تر بکنم. ولی خلاصه اش می تونه این شکلی باشه که وقتی یه برنامه fopen رو صدا میکنه، این درخواست داره با یه آدرس رشته ای اسم فایل اتفاق می افته. اما کرنل که از این اسم ها چیز خاصی نمی دونه پس:
۱. یه فانکشن این استرینگ رو کپی می کنه به فضای کرنل که کرنل بهتونه باهاش کار کنه
۲. یه فانکشن یه جای خالی توی لیست فایل های باز کرنل درست می کنه (این همون لیسته که lsof بهمون نشون می ده)
۳. یه فانکشن می ره نگاه می که ببینه این استرینگ که حاوی اسم فایل است در واقع داره به چه آی.نودی اشاره میکنه
۴. یه فانکشن اطلاعات اون آینود رو می ریزه توی جای خالی ای که در مرحله ۲ درست کردیم
۵. کرنل اون آی نود رو باز میکنه و منتظر دستورات بعدی می شه
و از حالا دیگه کرنل با اون آی نود طرفه. درخواست خوندن یا نوشتن و .. به اون آی نود می ره و کاری نداره که اسمش عوض شده و جابجا شده و .. مگر اینکه آی.نودش عوض بشه که تازه در اون صورت هم ممکنه کار مثلا نوشتن بتونه ادامه پیدا کنه در ای نود قبلی چون کرنل براش درخواست می فرسته. (اگر یه فایل بسازین، جایی با برنامه نویسی بازش کنین برای ادیت، بعد تو ترمینال حذفش کنین، هنوز می تونین توش چیز بنویسین ولی خب جایی نوشته نمی شه دیگه)
پ.ن. یه سوال خوب دیگه؟ چطوری می شه که وقتی توی پایتون می نویسیم
print (str(11))
واقعا مینویسه 11؟ (: اگر یک کم عمیق بهش فکر کنین واقعا پیچیده است چون باید بتونه عددی که در مبنای دو دویی یه جایی تو حافظه هست رو تبدیل کنه به ظاهر ده دهی و بعد کاراکترهاش رو جایگزین کنه که بسیار پیچیده تر / غیربهینه تر از چیزی است که که در لحظه اول به نظر میاد (:
پ.ن.۲. از حفظ نوشتن در نتیجه منطقا دقیق نیست. البته از ظاهرش هم معلوم بود که دقیق نیست دیگه (:
-
کاش یکم eli5 تر میبود توضیحاتتون بزرگوار 😅
-
سلام بزرگواران، به شکل اتفاقی به یک مورد تقریبا عجیبی برخورد کردم، حداقل برای خودم. یک ویدئو در حال پخش بود، حواسم نبود اسمش عوض کردم و در کمال تعجب این اجازه را به من داد :(
مگه منطقا نباید بگه این فایل باز و نمیتونه اونو Move کنه؟ یا به قول معروف تغییر نام بده؟
چجوری عمل میشه نکنه کل فیلم توی رم نگه میداره؟ شدنی نیست اصلا، یا temp میگیره از فایل؟
حتی میتونید فایلی که توسط یه پردازش باز شده هست رو پاک کنید.
-
خب قطعا نمیره روی رم ، پس چجوری ؟ پاک نمیکنه تا پردازش تموم شه و الکی بهمون نشون میده که شده ؟
چون خودم مدت هاس اینکارو کردم و دیدم ! ولی خب نیومدم تاپیکشو بزنم : )
-
- شما میتونید حتی یک فایل در حال اجرا رو حذف کنید.
- جالبتر از اون، اگر فایل در حال استفاده باشه، میتونید فایل حذف شده رو به راحتی برگردونید.
- وقتی یک فایل رو انتقال میدید (در همون فایل سیستم) یا حذف میکنید، تنها اتفاقی که رخ داده یک تغییر در لیست دایرکتوری(ها) هست.
- سیستمعامل وقتی شروع به کار با یک فایل میکنه، با inode طرف هست.
- وقتی یک فایل رو حذف میکنید هم تنها اون رو از لیست دایرکتوری حذف کردید، و فایل هنوز روی دیسک نوشته شده و بلاکهایی رو اشغال کرده.
- سیستمعامل با مشاهده تعداد لینکهای یک indoe (بسته به اینکه با دایرکتوری یا فایل سر و کار داره) و اینکه indoe در حال استفاده هست یا خیر، تصمیم میگیره که از اون indoe و بلاکها برای نوشتن فایل/دایرکتوری دیگه استفاده کنه یا نه.
-
دوستان خیلی ممنون از توضیحاتتون، مخصوصا جادی که خیلی کامل توضیح دادن، مثال آخر ایشون در پایتون هم بسیار جالب بود. در حد فهم خودم یه چیزایی متوجه شدم که چرا این اتفاق میفته.
آقا میلاد، هم جواب داد هم جزئیات دیگه اضافه کردن که عالی بود 👍