2012-11-26 25 views
7

Loại phương pháp nào tồn tại trong linux cho các hoạt động đĩa cấp thấp trong C++? Tôi đang cố gắng viết trình quản lý dữ liệu của riêng mình trên đĩa. Ví dụ, tôi muốn tạo một chương trình C++ trong môi trường Linux phân bổ một lượng nhất định (liên tục) trên đĩa và sau đó tự do cho phép tôi đọc/ghi vào đoạn dữ liệu đó. Tôi không nghĩ rằng tôi muốn sử dụng tiêu chuẩn fstream::open bởi vì sau đó tập tin được quản lý bởi hệ điều hành và tôi có thể không nhận được một phần liên tục trên đĩa.Hoạt động của ổ đĩa mức thấp trong Linux cho C++

Cảm ơn.

+1

Rất nhiều thứ ở đây cũng vậy: http://bit.ly/V2ruze – soulseekah

Trả lời

4

Nói chung, hoạt động đĩa "mức thấp" từ các chương trình người dùng trong Linux liên quan đến việc mở thiết bị đĩa đặc biệt. Trên máy tính của tôi, chúng được gọi là các tên như "/ dev/sda" hoặc "/ dev/sda4" hoặc thậm chí "/ dev/disk/by-uuid/2a5150b4-71cb-11e1-b2fe-3b0d270b4e16".

Bạn nên cẩn thận khi chọn tệp thiết bị của mình. Viết vào phân vùng hệ thống của bạn bằng cách sử dụng này không phải là một ý tưởng tốt. Ngoài ra, mở tập tin thiết bị cần truy cập root trong hầu hết các trường hợp (vì lý do rõ ràng).

Câu hỏi về việc sử dụng fstream có trực giao hay không. Bạn có thể sử dụng std::fstream, fopen hoặc thậm chí open để mở thiết bị. Sau đó sử dụng bất kỳ hoạt động đọc nào khớp với phần mở mà bạn đã làm.

Ví dụ cụ thể của bạn, bạn có thể cân nhắc xem bạn có cần chức năng này không. Trích dẫn Wikipedia, mà lần lượt được trích dẫn Linux System Administrator Guide:

Tuy nhiên, như các hệ thống Linux Quản trị viên Hướng dẫn khẳng định, "Modern Linux hệ thống tập tin (s) giữ phân mảnh ở mức tối thiểu bằng cách giữ cho tất cả các khối trong một tập tin gần nhau thậm chí nếu chúng không thể được lưu trữ trong các sector liên tiếp. Một số hệ thống tập tin, như ext3, phân bổ hiệu quả khối miễn phí gần các khối khác nhất trong một tệp. Do đó không cần phải lo lắng về việc phân mảnh trong hệ thống Linux. "


Kể từ khi bạn đề cập đến C++, tôi giả sử bạn đang viết một chương trình sử dụng và không phải là một thiết bị điều khiển. Các hoạt động đĩa "mức thấp" thực sự chỉ có sẵn bên trong hạt nhân. Nếu bạn, trên thực tế, muốn viết một trình điều khiển thiết bị, vui lòng đặt lại câu hỏi của bạn để làm rõ điều đó.

+2

Chỉ cần đảm bảo rằng đó là thiết bị phù hợp, ghi vào phân vùng hệ thống của bạn bằng cách sử dụng này không phải là một ý tưởng tốt. Cũng cần truy cập root trong hầu hết các trường hợp (vì lý do rõ ràng). – josefx

+0

@josefx - Cảm ơn. Theo đạo văn. –

+1

Cảm ơn @ Robᵩ, tôi đang cố gắng viết một Hệ thống quản lý cơ sở dữ liệu (DBMS) để nó không phải là một trình điều khiển thiết bị mà là một phần mềm. Cám ơn về những thông tin tuyệt vời! – Matthew

1

Tôi không biết cách nào để thực hiện việc này bằng cách sử dụng hệ thống tệp chuẩn của Linux. Tôi nghĩ bạn sẽ phải có một phân vùng riêng và làm I/O trực tiếp trên tệp giả dev của mình (ví dụ: /dev/sda2).

-2

Bạn nên sử dụng cuộc gọi hệ thống. Có một danh sách ở đây: linux system calls

+0

Tôi cho rằng anh ta đã bị giảm hạng vì trang đó đề cập đến 2.2 hạt nhân? Hay đó là một cái gì đó khác ... –

+0

Tôi đã viết nó như là một mẫu, Làm thế nào tôi có thể biết phiên bản hạt nhân mà ông sử dụng? Hầu hết các cuộc gọi hệ thống đều giống nhau trên hạt nhân Linux. –

+0

Vâng công ty của tôi chặn trang web đó là "Dangerous \t Trang gian lận hoặc nguồn đe dọa đã được xác minh", nhưng có thể danh sách các cuộc gọi hệ thống đơn giản không phải là câu trả lời hữu ích. –

Các vấn đề liên quan