این چیزها می تونن خیلی عمیق باشن. منظورم اینه که جواب این سوال ها می تونه شما رو به کد کرنل راهنمایی کنه. اتفاقا این سوال خیلی خوبیه و من یه جایی نوشتمش که اگر وقت شد بررسی دقیق تر بکنم. ولی خلاصه اش می تونه این شکلی باشه که وقتی یه برنامه fopen رو صدا میکنه، این درخواست داره با یه آدرس رشته ای اسم فایل اتفاق می افته. اما کرنل که از این اسم ها چیز خاصی نمی دونه پس:
۱. یه فانکشن این استرینگ رو کپی می کنه به فضای کرنل که کرنل بهتونه باهاش کار کنه
۲. یه فانکشن یه جای خالی توی لیست فایل های باز کرنل درست می کنه (این همون لیسته که lsof بهمون نشون می ده)
۳. یه فانکشن می ره نگاه می که ببینه این استرینگ که حاوی اسم فایل است در واقع داره به چه آی.نودی اشاره میکنه
۴. یه فانکشن اطلاعات اون آینود رو می ریزه توی جای خالی ای که در مرحله ۲ درست کردیم
۵. کرنل اون آی نود رو باز میکنه و منتظر دستورات بعدی می شه
و از حالا دیگه کرنل با اون آی نود طرفه. درخواست خوندن یا نوشتن و .. به اون آی نود می ره و کاری نداره که اسمش عوض شده و جابجا شده و .. مگر اینکه آی.نودش عوض بشه که تازه در اون صورت هم ممکنه کار مثلا نوشتن بتونه ادامه پیدا کنه در ای نود قبلی چون کرنل براش درخواست می فرسته. (اگر یه فایل بسازین، جایی با برنامه نویسی بازش کنین برای ادیت، بعد تو ترمینال حذفش کنین، هنوز می تونین توش چیز بنویسین ولی خب جایی نوشته نمی شه دیگه)
پ.ن. یه سوال خوب دیگه؟ چطوری می شه که وقتی توی پایتون می نویسیم
print (str(11))
واقعا مینویسه 11؟ (: اگر یک کم عمیق بهش فکر کنین واقعا پیچیده است چون باید بتونه عددی که در مبنای دو دویی یه جایی تو حافظه هست رو تبدیل کنه به ظاهر ده دهی و بعد کاراکترهاش رو جایگزین کنه که بسیار پیچیده تر / غیربهینه تر از چیزی است که که در لحظه اول به نظر میاد (:
پ.ن.۲. از حفظ نوشتن در نتیجه منطقا دقیق نیست. البته از ظاهرش هم معلوم بود که دقیق نیست دیگه (: