HOME > 게시판 > 자유게시판
게시판| 자유게시판
※ 게시판 용도에 맞지 않는 글(광고및 홍보 글 등)은 임의삭제될 수 있습니다.

 
작성일 : 06-01-05 14:14
디바이스 드라이버 제어에서 ioctl함수에 대해 잘 모르겟습니다.
 글쓴이 : 정성욱
조회 : 1,912  
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/lp.h>

int main(int argc, char **argv)
{
      int fd;
      int prnstate;
      int lp;
     
      unsigned char buff[128];
      fd = open("/dev/lp0", O_RDWR | O_NDELAY);
      if(fd<0)
      {
           perror("open error");
           exit(1);
      }

      while(1)
      {
            ioctl(fd, LPGETSTATUS, &prnstate);

            // 13pin <--> GND Pin
            if(prnstate & LP_PSELECD) printf("ON\n");
            else          printf("OFF\n");
            usleep(5000);
       }

       close(fd);
       return 0;
}

여기서요 ioctl 함수를 사용합니다. 이 함수에 의해서 prnstate 변수에 현재의 프린터 포트 입력 상태를 얻어온다고 책에 나와있네요. 책에 찾아보니  ioctl 함수의 매크로 라고 나와있는데요.
 LPGETSTATUS 변수때문에  prnstate 변수에 현재의 프린터 포트 입력 상태를 얻어오는 것 같은데요.  LPGETSTATUS 무슨 뜻인지 잘 모르겟네요...
ioctl함수에 자체적으로 쓰는게 많다고 나와잇는데요. 그 이상 설명이 없습니다.
좀 알려주세요.ㅠㅠ

이 글을 트위터로 보내기 이 글을 페이스북으로 보내기

홍보성 06-01-06 10:28
 
  디바이스든 소켓이든 특정 사용되는 함수마다 특정 매크로들이 정의 되어있습니다. 해당 매크로들은 include되어있는 header file에 정의 되어있구요. 보통 주소번지들로 이루어져있습니다.
위 LPGETSTATUS는 어휘에서 그대로 보이듯이 LP 장치에서 STATUS 상태정보를 GET 가져와라 라는 뜻이네요. ㅡㅡㅋ
ioctl(장치포인터,매크로,매크로가반환한데이타를 넣을 변수주소) 가 되겠군요.
매크로들은 그냥 필요시 외우면서 쓰는 방법이 개발자 수명을 늘려주는 길입니다. 힘내시길~