Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>
  1. eject
  2. 시디롬 꺼내는 코드
  3. [yundream]
  4. Version 0.2
  5. 2004/02/26

설명

ioctl()을 이용해서 cdrom을 꺼내는 간단한 함수 입니다.

사용방법

#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ustat.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/cdrom.h>
#include <stdio.h>
#include <errno.h>

int eject(void);
  1. cdrom 꺼내기를 성공할경우 0, 실패했을 경우 0이 아닌 수를 리턴한다.
#include "eject.h"
int main()
{
    if (eject() != 0)
    {
        perror("error\n");
        return 1;
    }
    return 0;
}

코드

#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ustat.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/cdrom.h>
#include <stdio.h>
#include <errno.h>

char *cd_device = "/dev/cdrom";

int cdeject(void)
{
    int cd_fd;

    struct stat  lstat;
    struct ustat lustat;

    // CDROM 장치를 연다. 
    if ((cd_fd = open(cd_device, O_RDONLY)) < 0)
    {
        return 1;
    }

    // fstat()를 이용해서 파일(장치)정보를 얻어온다. 
    if (fstat(cd_fd, &lstat) != 0)
    {
        close(cd_fd);
        return 2;
    }

    // ustat()를 이용해서 파일시스템 정보를 요청한다. 
    // 만약 CDROM이 mount되어 있다면 정보를 가져오고 
    // 0을 리턴할 것이다. 
    // mount되어 있는 장치는 eject불가능 하므로 
    // errno로 EBUSY를 설정하고 리턴한다. 
    if (ustat(lstat.st_rdev, &lustat) == 0)
    {
        errno = EBUSY;
        close(cd_fd);
        return 3;
    }

    // eject 한다.
    if (ioctl(cd_fd, CDROMEJECT) != 0)
    {
        close(cd_fd);
        return 4;
    }
    close(cd_fd);
    return 0;
}

변경사항