내 문제는 스파 스 파일 읽기를 처리하고 파일의 범위가 주변의 일부 논리를 수행하는 위치를 이해하는 것입니다.ioctl을 FS_IOC_FIEMAP과 함께 사용하는 방법
이러한 것들을 찾아내는 직접적인 API 호출이 없기 때문에 ioctl api를 사용하기로 결정했습니다. cp 명령이 스파 스 파일을 통해 코드를 복사하여 문제를 해결하고이를 보았던 방법에 대한 아이디어를 얻었습니다.
그래서, 사용자 공간에서 실행 내 샘플 프로그램에서 같은 일을 시도하고 "잘못된 인수"와 그 오류를 밖으로. 내가 누락 된 부분이나 사용자 공간에서 가능한지 확실하지 않습니다. ext4 파일 시스템에서 우분투 14.04를 사용하고 있습니다. 이것은 아래의 요청 모드를 지원하는 장치 드라이버에서 문제가 될 수 있습니까?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/fcntl.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <linux/fs.h>
#include "fiemap.h" //This is from https://github.com/coreutils/coreutils/blob/df88fce71651afb2c3456967a142db0ae4bf9906/src/fiemap.h
int main(int argc, char* argv[]) {
int input_fd;
if(argc != 2){
printf ("Usage: ioctl file1");
return 1;
}
/* Create input file descriptor */
input_fd = open (argv [1], O_RDWR);
if (input_fd < 0) {
perror ("open");
return 2;
}
union { struct fiemap f; char c[4096]; } fiemap_buf;
struct fiemap *fiemap = &fiemap_buf.f;
int s = ioctl(input_fd, FS_IOC_FIEMAP, fiemap);
if (s == 0) {
printf("ioctl success\n");
} else {
printf("ioctl failure\n");
char * errmsg = strerror(errno);
printf("error: %d %s\n", errno, errmsg);
}
/* Close file descriptors */
close (input_fd);
return s;
}
작업 한 영화를 초기화하는 중! 고마워요! – Aila