Linux의 C 프로그램에서 FS가 없는 하드 디스크에 직접 액세스
나는 C 프로그램에서 하드디스크 전체를 직접 접속하고 싶습니다.FS는 없고 FS는 절대 없을 겁니다
/dev/sda(예:)를 열고 디스크의 블록/섹터 수준에서 I/O를 수행하고자 합니다.
저는 리눅스 환경(C언어, 파이썬, 펄, 자바를 알고 있습니다)에서 C 프로그래밍을 배우기 위한 프로그램을 작성할 계획이지만 리눅스 환경에 대한 자신감이 부족합니다.
학습 목적으로 교토 캐비닛을 가지고 놀고 계산된 해시에 해당하는 값을 하드 디스크의 "블록/섹터"에 직접 저장하여 쌍을 기록하려고 합니다.교토-hash 해시 데이터베이스 파일에 "cabinet, 블록/섹터 참조".
표준 CI/O 기능을 사용하여 이것이 가능한지 아니면 "디바이스 드라이버" 같은 것을 써야 하는지 모르겠습니다.
다른 곳에서 언급된 바와 같이 *NIX 시스템에서는 다음과 같은 장치를 차단합니다./dev/sda
일반 파일로 접근할 수 있습니다.장치에서 파일 시스템이 마운트된 경우 파일 시스템을 쓰기 위한 파일로 열지 못합니다.
블록 장치를 가지고 놀고 싶다면 먼저 평 파일을 블록 장치로 제공하는 를 사용하는 것이 좋습니다.예를 들어,
dd if=/dev/zero of=./loop_file_10MB bs=1024 count=10K
losetup /dev/loop0 $PWD/loop_file_10MB
그 다음에./dev/loop0
블록 장치인 것처럼 행동하지만 작성된 모든 정보는 파일에 저장됩니다.
드라이브에 대한 장치 파일(예:/dev/sda
)는 블록 장치로, 일반 파일처럼 파일을 열고 검색하고 사용할 수 있습니다.
네, 다른 분들이 지적하신 것처럼 블록 장치를 간단하게 열 수 있습니다.
그러나 블록 경계 및 전체 블록에 대해 IO(어쨌든 쓰기)를 수행하는 것이 매우 좋습니다.pread() 및 pwrite()와 같은 것을 사용하여 이러한 IO를 수행하거나 장치의 일부 또는 전부를 mmap할 수 있습니다.
사용할 수 있는 ioctl이 많이 있습니다. 자세한 내용은 "mansd"를 참조하십시오.그것들이 모두 같은 장소에 기록되어 있는 것 같지는 않습니다.
linux/fs.h BLKROSET 및 여러 ioctl이 정의되어 있으므로 사용 방법을 알아보기 위해 주위를 둘러봐야 합니다.장치의 크기와 블록 크기를 파악하는 등 유용한 작업을 수행할 수 있습니다.
util-linux-ng 패키지의 소스 코드는 당신의 친구이며, 예를 포함하고 있습니다.
언급URL : https://stackoverflow.com/questions/3520459/direct-access-to-hard-disk-with-no-fs-from-c-program-on-linux
'source' 카테고리의 다른 글
원격 세션에서 Powershell 로그오프 (0) | 2023.10.09 |
---|---|
mysql 숫자가 쉼표로 구분된 목록에 있는지 확인합니다. (0) | 2023.10.09 |
스프링 키클로크:사용자 ID 가져오기 (0) | 2023.10.09 |
기존 표에서 각 단어의 첫 글자를 대문자로 바꿉니다. (0) | 2023.10.09 |
Linux에서 Ctrl + C 인터럽트 이벤트 처리 (0) | 2023.10.09 |