Làm cách nào để đọc/ghi thiết bị chặn? Tôi nghe tôi đọc/ghi giống như một tập tin bình thường vì vậy tôi thiết lập một thiết bị vòng lặp bằng cách làmLàm cách nào để đọc/ghi thiết bị chặn?
sudo losetup /dev/loop4 ~/file
Sau đó, tôi chạy ứng dụng trên các tập tin sau đó thiết bị loop
sudo ./a.out file
sudo ./a.out /dev/loop4
Các tập tin thực thi một cách hoàn hảo. Thiết bị vòng lặp đọc 0 byte. Trong cả hai trường hợp, tôi nhận FP == 3 và off == 0. Các tập tin chính xác được chiều dài chuỗi và in chuỗi trong khi vòng lặp được tôi 0 và in không có gì
Làm thế nào để đọc/ghi vào một thiết bị khối?
#include <fcntl.h>
#include <cstdio>
#include <unistd.h>
int main(int argc, char *argv[]) {
char str[1000];
if(argc<2){
printf("Error args\n");
return 0;
}
int fp = open(argv[1], O_RDONLY);
printf("FP=%d\n", fp);
if(fp<=0) {
perror("Error opening file");
return(-1);
}
off_t off = lseek(fp, 0, SEEK_SET);
ssize_t len = read(fp, str, sizeof str);
str[len]=0;
printf("%d, %d=%s\n", len, static_cast<int>(off), str);
close(fp);
}
tệp '~/file' lớn đến mức nào? làm 'losetup' cho tập tin nhỏ có thể vô ích hoặc vô hình đối với các công cụ hệ thống. – ymonad
@ymonad Một câu của nó, khoảng 40bytes. Tôi đã thử một tập tin mới bằng cách sử dụng 'dd if =/dev/zero = ~/file2 count = 10K' rồi chỉnh sửa nó bằng vi. Dường như nó hoạt động. Nó chỉ bỏ qua nó vì tôi có một tập tin nhỏ hay nó bỏ qua các khối khi <4K của nó? Nếu tôi có một 8k + 20bytes là 20bytes cuối cùng bị bỏ qua? Cảm ơn cho bình luận –
Trong môi trường của tôi 'losetup' cho tôi một cảnh báo cho tập tin lớn: _" Cảnh báo: tập tin không phù hợp với một khu vực 512 byte, kết thúc của tập tin sẽ bị bỏ qua "_, và cho tập tin nhỏ: _ "Cảnh báo: tệp nhỏ hơn 512 byte; thiết bị vòng lặp có thể vô dụng hoặc vô hình đối với các công cụ hệ thống." _. Vì vậy, sau này có thể là chính xác. – ymonad