ErfanOS
ErfanOS: Laluan ke Kawalan Menyeluruh
ErfanOS ialah projek OS tersuai oleh ErfanKeyhani-1 (Me) yang bertujuan untuk menghilangkan keperluan untuk sistem yang dikawal oleh kerajaan dan dikendalikan oleh syarikat. Ia adalah sistem pengendalian DIY sepenuhnya yang but dengan pemuat but pemasangan tersuai, berjalan dalam mod dilindungi 32-bit dan mempunyai inti berasaskan C. Anda boleh mengujinya pada QEMU, dan ini semua tentang kebebasan sepenuhnya. Matlamatnya ialah Untuk membina OS yang berfungsi sepenuhnya, satu bahagian pada satu masa.
Kenapa ErfanOS?
Bosan dengan sistem kembung yang menjejaki semua yang anda lakukan? ErfanOS dibina untuk meletakkan pengguna kembali dalam kawalan. Ia kurus, ia pantas, dan ia adalah sumber terbuka. Projek ini adalah mengenai kebebasan—kebebasan daripada pengawasan, kawalan dan ciri yang tidak diperlukan. OS bermula dengan kernel asas yang boleh mencetak "Selamat Datang ke Kebebasan" semasa but, dan dari situ, ia berkembang menjadi pesaing yang serius (sekurang-kurangnya diharapkan).
Ciri Semasa:
- Mod 32-bit: Berjalan dalam mod dilindungi, membenarkan lebih banyak akses memori daripada 16-bit.
- Pemuat But Tersuai: Memuatkan sistem ke dalam memori dan menyerahkan kawalan ke kernel.
- Inti Asas: Ditulis dalam C dan beberapa pemasangan, berkeupayaan untuk kefungsian asas seperti output teks.
- Pengujian QEMU: Boleh dijalankan dan dinyahpepijat dalam persekitaran maya.
Perjuangan Terkini dan Rancangan Masa Depan
Baru-baru ini, saya telah bergelut dengan melaksanakan pemacu papan kekunci, yang menyebabkan beberapa halangan dalam kernel. Walau bagaimanapun, itu adalah sebahagian daripada usaha, dan tidak ada yang menghalang kemajuan. Setelah asasnya stabil, ErfanOS akhirnya akan beralih ke 64-bit, dengan rancangan untuk sistem fail, berbilang tugas dan banyak lagi.
Apa Seterusnya?
- Pembetulan pemacu papan kekunci: Perlu mendapatkan input berfungsi dengan lancar semula.
- Peralihan 64-bit: Beralih ke masa hadapan dengan pengurusan dan prestasi memori yang lebih baik.
- Berbilang tugas & Sistem Fail: Cipta OS berfungsi sepenuhnya yang mampu mengendalikan berbilang tugas dan menyusun fail dengan cekap.
ErfanOS adalah tentang belajar dengan melakukan, dan jika anda meminati pengaturcaraan sistem peringkat rendah, OS dev, atau seperti melekatkannya pada lelaki itu, ia patut diperiksa keluar.
Pautan ke projek: ErfanOS pada GitHub
Atas ialah kandungan terperinci ErfanOS. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

RAII adalah teknologi penting yang digunakan dalam pengurusan sumber dalam C. terasnya terletak pada menguruskan sumber secara automatik melalui kitaran hayat objek. Idea terasnya ialah: Sumber diperoleh pada masa pembinaan dan dikeluarkan pada kemusnahan, dengan itu mengelakkan masalah kebocoran yang disebabkan oleh pelepasan manual. Sebagai contoh, apabila tidak ada RAII, operasi fail memerlukan secara manual memanggil fclose. Sekiranya terdapat ralat di tengah atau kembali terlebih dahulu, anda mungkin lupa untuk menutup fail; Dan selepas menggunakan RAII, seperti kelas FileHandle yang merangkumi operasi fail, destructor akan dipanggil secara automatik selepas meninggalkan skop untuk melepaskan sumber. 1.RAII digunakan dalam pengurusan kunci (seperti STD :: LOCK_GUARD), 2.

Terdapat empat kaedah biasa untuk mendapatkan elemen pertama STD :: Vektor: 1. Gunakan kaedah depan () untuk memastikan bahawa vektor tidak kosong, mempunyai semantik yang jelas dan disyorkan untuk kegunaan harian; 2. Gunakan subskrip [0], dan ia juga perlu dinilai kosong, dengan prestasi yang setanding dengan depan () tetapi semantik yang sedikit lemah; 3. Gunakan *Begin (), yang sesuai untuk pengaturcaraan generik dan algoritma STL; 4. Gunakan pada (0), tanpa penghakiman secara tidak langsung, tetapi prestasi yang rendah, dan membuang pengecualian ketika melintasi sempadan, yang sesuai untuk debugging atau pengendalian pengecualian; Amalan terbaik adalah memanggil kosong () terlebih dahulu untuk memeriksa sama ada ia kosong, dan kemudian gunakan kaedah depan () untuk mendapatkan elemen pertama untuk mengelakkan tingkah laku yang tidak ditentukan.

Untuk menentukan sama ada std :: pilihan mempunyai nilai, anda boleh menggunakan kaedah has_value () atau secara langsung menilai dalam pernyataan IF; Apabila mengembalikan hasil yang mungkin kosong, disarankan untuk menggunakan STD :: Pilihan untuk mengelakkan petunjuk dan pengecualian null; Ia tidak boleh disalahgunakan, dan nilai pulangan Boolean atau pembolehubah bool bebas lebih sesuai dalam beberapa senario; Kaedah permulaan adalah pelbagai, tetapi anda perlu memberi perhatian untuk menggunakan Reset () untuk membersihkan nilai, dan memberi perhatian kepada kitaran hayat dan tingkah laku pembinaan.

Perpustakaan standard C membantu pemaju meningkatkan kualiti kod dengan menyediakan alat yang cekap. 1. Bekas STL hendaklah dipilih mengikut tempat kejadian, seperti vektor yang sesuai untuk penyimpanan berterusan, senarai yang sesuai untuk penyisipan dan penghapusan yang kerap, dan unstered_map sesuai untuk carian pantas; 2. Algoritma perpustakaan standard seperti jenis, mencari, dan transformasi dapat meningkatkan kecekapan dan mengurangkan kesilapan; 3. Pointers pintar unik_ptr dan shared_ptr berkesan menguruskan memori untuk mengelakkan kebocoran; 4. Alat lain seperti pilihan, variasi, dan fungsi meningkatkan keselamatan kod dan ekspresi. Menguasai fungsi teras ini dapat mengoptimumkan kecekapan pembangunan dan kualiti kod.

Fungsi adalah unit asas penganjuran kod dalam C, digunakan untuk merealisasikan penggunaan semula kod dan modularization; 1. Fungsi dibuat melalui pengisytiharan dan definisi, seperti Intadd (Inta, INTB) mengembalikan jumlah kedua -dua nombor; 2. Lulus parameter apabila memanggil fungsi, dan mengembalikan hasil jenis yang sepadan selepas fungsi dilaksanakan; 3. Fungsi tanpa nilai pulangan menggunakan tidak sah sebagai jenis pulangan, seperti VoidGreet (StringName) untuk mengeluarkan maklumat ucapan; 4. Menggunakan fungsi boleh meningkatkan kebolehbacaan kod, mengelakkan pertindihan dan memudahkan penyelenggaraan, yang merupakan konsep asas pengaturcaraan C.

Operasi bit dapat melaksanakan operasi integer yang mendasari, 1. Periksa sama ada bit I-th ialah 1: Gunakan N & (1

Jika ia meleleh apabila memadam elemen, anda mesti mengelakkan menggunakan Iterator yang gagal. ① Cara yang betul adalah menggunakannya = vec.erase (IT), dan gunakan iterator yang sah yang dikembalikan dengan memadam untuk terus melintasi; ② Idiom yang disyorkan untuk penghapusan batch: vec.erase (std :: rove_if (vec.begin (), vec.end (), syarat), vec.end ()), yang selamat dan cekap; ③ Anda boleh menggunakan iterator terbalik untuk memadam dari belakang ke depan, logiknya jelas, tetapi anda perlu memberi perhatian kepada arah keadaan. Kesimpulan: Sentiasa mengemas kini iterator dengan nilai pulangan memadam, melarang operasi pada Iterator yang gagal, jika tidak, tingkah laku yang tidak ditentukan akan dihasilkan.

Jawapannya ialah: Gunakan std :: String constructor untuk menukar array char ke std :: string. Jika array mengandungi pertengahan '\ 0', panjang mesti ditentukan. 1. Untuk rentetan gaya C yang berakhir dengan '\ 0', gunakan std :: stringstr (charArray); untuk melengkapkan penukaran; 2. Jika array char mengandungi pertengahan '\ 0' tetapi perlu menukar aksara n pertama, gunakan std :: stringstr (chararray, panjang); untuk menentukan panjangnya; 3. Apabila memproses pelbagai saiz tetap, pastikan ia berakhir dengan '\ 0' dan kemudian tukarnya; 4. Gunakan Str.Assign (CharArray, CharArray Strl
