2012-11-26 38 views
7

C++ 'da düşük seviyeli disk işlemleri için Linux'ta ne gibi yöntemler var? Bir disk üzerinde kendi veri yöneticimi yazmaya çalışıyorum. Örneğin, Linux ortamında bir diske belirli bir miktar (sürekli) ayıran bir C++ programı oluşturmak ve sonra bu veri yığınını okumaya/yazmama serbestçe izin vermek istiyorum. Standart fstream::open kullanmak istediğimi sanmıyorum çünkü o zaman dosya işletim sistemi tarafından yönetiliyor ve diskte sürekli bir bölüm alamayabilirim.Linux'ta düşük seviye disk işlemleri C++ için

Teşekkürler.

+1

sürü de: o sayfa 2.2 çekirdek atıfta çünkü http://bit.ly/V2ruze – soulseekah

cevap

4

Genellikle Linux'taki "düşük seviye" disk işlemleri, kullanıcı programlarından disk özel aygıtını açmayı içerir. Bilgisayarımda, bunlar "/ dev/sda" veya "/ dev/sda4" veya "/ dev/disk/by-uuid/2a5150b4-71cb-11e1-b2fe-3b0d270b4e16" gibi adlar olarak adlandırılır. Aygıt dosyanızı seçerken çok dikkatli olmalısınız. Bunu kullanarak sistem bölümünüze yazmak iyi bir fikir değildir. Ayrıca, aygıt dosyasını açmak çoğu durumda kök erişim gerektirir (açık nedenlerle).

fstream'un kullanılıp kullanılmayacağı sorusu ortogonaldir. Cihazı açmak için std::fstream, fopen veya hatta open kullanabilirsiniz. Sonra, okuduğunuz işlem, yaptığınız açıkla eşleşiyorsa kullanın.

Özel örneğiniz için, bu işlevselliğe ihtiyacınız olup olmadığını yeniden gözden geçirebilirsiniz. sırayla Linux System Administrator Guide alıntı olduğu Wikipedia, aktaran: Ancak

Linux Sistem Yöneticisi Kılavuzu Modern Linux dosya (lar) birbirine yakın bir dosyada tüm blokları tutarak en azından parçalanma tutmak" diyen bir şekilde Ardışık sektörlerde saklanmasalar bile, ext3 gibi bazı dosya sistemleri, bir dosyadaki diğer bloklara en yakın serbest bloğu etkili bir şekilde tahsis eder. Bu nedenle, bir Linux sisteminde parçalanma hakkında endişelenmenize gerek yoktur. ”

C++ söz yana


, sana bir kullanıcı programı değil, bir aygıt sürücüsü yazıyoruz varsayalım. Gerçekten "düşük seviye" disk işlemleri sadece çekirdeğin içinde kullanılabilir. Aslında, bir aygıt sürücüsü yazmak istiyorsanız, lütfen bunu netleştirmek için sorunuzu yeniden belirtin. Burada şeyler

+2

Sadece bunun doğru bir cihaz olduğundan emin olun, sistem bölümünüze yazarak bu iyi bir fikir değil. Ayrıca çoğu durumda (erişkin sebeplerden dolayı) kök erişimine ihtiyaç duyar. – josefx

+0

@josefx - Teşekkürler. Aşırma. –

+1

Teşekkürler @ Robᵩ, bir Veritabanı Yönetim Sistemi (DBMS) yazmaya çalışıyorum, bu yüzden bir aygıt sürücüsü değil, bir yazılım parçası. Büyük bilgi için teşekkürler! – Matthew

1

Standart Linux dosya sistemlerini kullanarak bunu yapmanın hiçbir yolunun farkında değilim. Ayrı bir bölüme sahip olmanız ve doğrudan dev sözde dosyasına (ör. /dev/sda2) sahip olmanız gerektiğini düşünüyorum.

-2

Sistem çağrılarını kullanmalısınız. Burada bir liste var:

+0

Onun downvoted edildi varsayalım? Ya da başka bir şey miydi ... –

+0

Bir örnek olarak yazdım, Kullandığı hangi çekirdek sürümünü nasıl bilebilirim? Sistem çağrılarının çoğu linux çekirdeklerinde aynıdır. –

+0

Şirketim bu web sitesini "Tehlikeli bir \t Doğrulanmış sahte sayfa veya tehdit kaynağı" olarak engellemektedir, ancak sistem çağrılarının bir listesi basit bir yanıt olmayabilir. –

İlgili konular