Dalam Linux, pemegang ialah pengecam, pengecam rujukan yang diuruskan oleh sistem Kernel boleh menggunakan pemegang untuk mengira alamat objek fail dalam kernel selagi pembangun memperoleh pemegangnya objek, ia boleh Objek melakukan operasi sewenang-wenangnya.
Persekitaran pengendalian tutorial ini: sistem linux5.9.8, komputer Dell G3.
Apakah pemegang
Pegangan ialah pengecam selagi kita mendapat pemegang objek, kita boleh melakukan sebarang operasi pada objek.
Hendal bukan penunjuk Sistem pengendalian boleh menggunakan pemegang untuk mencari sekeping memori. Pemegang ini mungkin pengecam, kunci peta atau penunjuk ia. fd boleh dianggap sebagai menggantikan pemegang sedikit sebanyak Linux mempunyai mekanisme yang sepadan, tetapi tidak ada jenis pemegang bersatu Pelbagai jenis sumber sistem dikenal pasti mengikut jenis masing-masing dan dikendalikan oleh antara muka masing-masing.
Di peringkat sistem pengendalian, operasi fail juga mempunyai konsep yang serupa dengan FILE Dalam Linux, ini dipanggil deskriptor fail (File Descriptor), dan dalam Windows, ia dipanggil pemegang (Handle) (bukan. disebut di bawah) Apabila samar-samar, ia secara kolektif dirujuk sebagai pemegang). Pengguna membuka fail melalui fungsi untuk mendapatkan pemegang, dan selepas itu pengguna memanipulasi fail melalui pemegang.
Penjelasan kasar
windows ialah handle, linux serupa dengan fd, dalam buku pembangunan windows terawal, handle diterjemahkan sebagai handle". Walaupun bunyinya tidak bagus, saya secara peribadi berpendapat ia agak ekspresif.
Walaupun anda hanya memegang pemegang, anda boleh menarik keseluruhan pintu, dan anda tidak perlu mengambil berat tentang rupa pintu itu
Jika pintu mempunyai berbilang pemegang, ia boleh ditarik oleh orang yang berbeza. (Proses) Pegang, sukar untuk mengatakan ke mana pintu akan pergi
Sebab untuk mereka bentuk pemegang sebegitu adalah pemegangnya boleh menghalang pengguna daripada membaca dan menulis objek fail dalam operasi kernel sistem sesuka hati. Sama ada Linux atau Windows, pemegang fail sentiasa dikaitkan dengan objek fail kernel, tetapi butiran cara ia dikaitkan tidak dapat dilihat oleh pengguna. Kernel boleh mengira alamat objek fail dalam kernel melalui pemegang, tetapi keupayaan ini tidak terbuka kepada pengguna.
Kendalikan dalam liunx
Dalam reka bentuk sistem Linux, kami mengikut prinsip bahawa semuanya adalah fail, iaitu fail cakera, direktori, soket rangkaian Penyambung, cakera, paip, dsb., yang kesemuanya adalah fail, akan mengembalikan fd apabila kita membukanya, iaitu pemegang fail.
Jika anda kerap membuka fail atau membuka soket rangkaian dan terlupa untuk melepaskannya, pemegangnya akan bocor.
Dalam sistem Linux, terdapat had pada bilangan pemegang fail yang boleh dipanggil oleh proses Secara lalai, bilangan maksimum pengendalian fail yang boleh dipanggil oleh setiap proses ialah 1024. Jika had ini melebihi, proses itu tidak akan dapat mendapatkan pemegang fail baharu, mengakibatkan ketidakupayaan untuk membuka fail baharu atau soket rangkaian, dan pelayan dalam talian akan dinafikan perkhidmatan.
Berikut ialah contoh praktikal Dalam Linux, fd dengan nilai 0, 1, dan 2 masing-masing mewakili input standard, output standard dan output ralat standard. Fd yang diperoleh dengan membuka fail dalam program mula berkembang dari 3.
Apakah sebenarnya fd?
Dalam kernel, setiap proses mempunyai "jadual fail terbuka" peribadi objek.
Dan fd ialah subskrip jadual ini. Apabila pengguna membuka fail, kernel secara dalaman akan menjana objek fail terbuka, mencari item kosong dalam jadual ini, biarkan item ini menghala ke objek fail terbuka yang dijana dan mengembalikan subskrip item ini sebagai fd.
Memandangkan jadual ini berada dalam kernel dan tidak boleh diakses oleh pengguna, walaupun pengguna memiliki fd, dia tidak boleh mendapatkan alamat objek fail terbuka dan hanya boleh mengendalikannya melalui fungsi yang disediakan oleh sistem.
Dalam bahasa C, saluran untuk memanipulasi fail ialah struktur FILE Tidak sukar untuk membayangkan bahawa struktur FILE dalam bahasa C mesti mempunyai hubungan satu dengan satu dengan fd Setiap struktur FILE fd sepadannya yang unik.
Dalam pengaturcaraan, pemegang ialah penunjuk pintar khas. Apabila aplikasi ingin merujuk blok memori atau objek yang diuruskan oleh sistem lain (seperti pangkalan data dan sistem pengendalian), pemegang digunakan.
Perbezaan antara pemegang dan penuding biasa ialah penuding mengandungi alamat memori objek yang dirujuk, manakala pemegang ialah pengecam rujukan yang diuruskan oleh sistem, yang boleh dipindahkan ke alamat memori oleh sistem. Mod akses objek tidak langsung ini meningkatkan kawalan sistem ke atas objek yang dirujuk.
Dalam pengurusan memori sistem pengendalian (seperti Mac OS dan Windows) pada tahun 1980-an, pemegang digunakan secara meluas. Deskriptor fail dalam sistem Unix pada asasnya dikendalikan. Seperti persekitaran desktop lain, API Windows menggunakan pemegang secara meluas untuk mengenal pasti objek dalam sistem dan untuk mewujudkan saluran komunikasi antara sistem pengendalian dan ruang pengguna. Sebagai contoh, borang pada desktop dikenal pasti oleh pemegang jenis HWND.
Hari ini, kapasiti memori yang meningkat dan algoritma memori maya telah menjadikan penunjuk yang lebih mudah lebih popular, manakala pemegang yang menghala ke penuding lain telah tidak disenangi. Namun begitu, banyak sistem pengendalian masih merujuk kepada penunjuk kepada objek persendirian dan indeks tatasusunan dalaman yang suatu proses diteruskan kepada klien sebagai pemegang.
Cadangan berkaitan: "Tutorial Video Linux"
Atas ialah kandungan terperinci apakah pemegang linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!