본문 바로가기

Programming/Linux_Kernel

Direct IO 를 위한 aligned buffer 얻기

출처 : http://altistory.net/333




  1. /* default.c */  
  2. #define _GNU_SOURCE  // O_DIRECT  
  3. #define IOUNIT 128*1024  
  4.   
  5. #include  
  6. #include  
  7. #include  
  8. #include   
  9.   
  10. int main()  
  11. {  
  12.   char *nBuf;                // not aligned buffer  
  13.   char *aBuf;                // aligned buffer  
  14.   int   fd;                  // file descriptor  
  15.   
  16.   // 1MB buffer (not aligned yet)  
  17.   nBuf = (char*) malloc(IOUNIT+getpagesize());  
  18.   // aligned buffer 'aBuf'  
  19.   aBuf = (char*)((unsigned)(nBuf+getpagesize()-1)/getpagesize()*getpagesize());  
  20.   
  21.   printf("OPEN FD: %d\n", fd=open("[블록장치경로]", O_RDWR ) );  
  22.   printf("WRITE: %d\n", write( fd, aBuf, IOUNIT ) );  
  23.   printf("READ: %d\n", read( fd, aBuf, IOUNIT ) );  
  24.   close(fd);  
  25.   
  26.   free(nBuf);  
  27. }