LINUX ] 자체적으로 데이터를 write하는 장치의 데이터를 Read 하고 싶습니다.(open(O_DIRECT))

erin의 이미지

Linux 환경(Android Kernel 2.6) 으로 개발중에 급 질문이 생겼습니다.

WANT]
자체적으로 데이터가 write되는 장치를 이용하여
장치의 데이터를 read해오고 싶습니다.

TRY_1]
int *phfd = open(O_CREAT|O_RDWR|O_DIRECT);
read(*phfd, *buf, n_size);

했으나.. O_DIRECT 옵션이 2.6환경에는 적용이 안되는지 (다른글 보니 그렇더군요)
read가 되지 않습니다.

TRY_2]
int *phfd = open(O_CREAT|O_RDWR);
fsync(*phfd);
read(*phfd, *buf, n_size);

했으나.. fsync로도 반응이 없습니다.
read가 되지 않습니다.

어찌하면 데이터를 read해 올 수 있을까요??

erin의 이미지

능력자님들의 방법 알려주세요~~

Fe.head의 이미지

커널용 open 반환값이 포인터인가요?

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

erin의 이미지

open에서 주소값을 반환해주는 값을 phfd의 포인터에 저장했습니다.
해당 함수가 호출될때 phfd의 값이 포인터로 정의 되어 들어오거든요.
( 예를 들면 테스트 프로그램에서 ConnectDev(&fd);로 호출을 하면
해당 소스의 unsigned long ConnectDev(int *phfd){}로 들어옵니다.)