질문&답변
클라우드/리눅스에 관한 질문과 답변을 주고 받는 곳입니다.
리눅스 분류

raw 디바이스 사용

작성자 정보

  • 임근식 작성
  • 작성일

컨텐츠 정보

본문

==> Raw Device를 사용하시기 위해 open()함수의 플래그를 잘못 사용하신 것 같습니다.
예제를 올릴테니 작성에 참고하시기 바랍니다. 장황하게 설명하는 것보다 그냥
예제 소스를 올르드리는 것이 이해를 도울수 있을 것 같습니다.

---------------------------------------------------------------------------------------


#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <time.h>

int main (void) {
        int fd1,fd2;
        static unsigned char block[1024+4096];
        unsigned char *bp = (unsigned char *)((long) &block & 0xfffff000);
        // allign on page boundary
        int reads=0, writes=0;
        int k;
        time_t ticks;
       
        fd1 = open("/dev/raw1",O_CREAT|O_RDWR);
        if (fd1 < 0) {
                printf("Can't open /dev/raw1 ");
                perror("rwtest: ");
                return 1;
        }
       
        for(k=0;k<1000;k++) {
                int count;
                if (k) {
                        lseek( fd1, 0, SEEK_SET);
                }
                if (k % 2) {
                        /* write */
                        count = write( fd1, bp, 1024);
                } else {
                        /* read */
                        *bp += 1;       // make page dirty, force reread;
                        count = read( fd1, bp, 1024);
                }
                if (count != 1024) {
                        printf("k = %d, Count = %d ", k, count);
                        return 2;
                }
        }
        close(fd1);
        return 0;
}

관련자료

댓글 1

임근식님의 댓글

  • 임근식
  • 작성일
참고로, buffer 사이즈를 잘 조절하시기 바랍니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,080 명
  • 현재 강좌수 :  36,010 개
  • 현재 접속자 :  89 명