作者共發了4篇帖子。
字體大小:較小 - 100% (默認)  內容轉換:不轉換
 
點擊 回復
1406 3
[有趣的程序]Linux系統下彈出光驅的C程序(已在Fedora22下測試通過)
巨大八爪鱼
武林盟主 二十一級
回復
1樓 發表於:2015-7-15 22:08
#include <fcntl.h>
#include <linux/cdrom.h>
#include <stdio.h>
#include <sys/ioctl.h>
#include <unistd.h>

int main(void)
{
    int fd = open("/dev/cdrom", O_RDONLY | O_NONBLOCK);
    if (fd == -1)
    {
        printf("Failed opening CD-ROM.\n");
        return -1;
    }
    
    if (!ioctl(fd, CDROMEJECT, NULL))
        printf("Ejected CD-ROM successfully.\n");
    else
        printf("Failed ejecting CD-ROM.\n");
    close(fd);
    return 0;
}
巨大八爪鱼
武林盟主 二十一級
回復
2樓 發表於:2015-7-15 22:10
由于open光驱时,可能光驱中没有光盘,因此需要使用O_NONBLOCK选项,否则open会失败(系統默認為我們打開這個光驅的目的是查看光盤上的文件)
巨大八爪鱼
武林盟主 二十一級
回復
3樓 發表於:2015-7-15 22:24
打開光驅,5秒後再自動關閉光驅的程序:
#include <fcntl.h>
#include <linux/cdrom.h>
#include <stdio.h>
#include <sys/ioctl.h>
#include <unistd.h>

int main(void)
{
    int fd = open("/dev/cdrom", O_RDONLY | O_NONBLOCK);
    if (fd == -1)
    {
        printf("Failed opening CD-ROM.\n");
        return -1;
    }
   
    if (!ioctl(fd, CDROMEJECT, NULL))
        printf("Ejected CD-ROM successfully.\n");
    else
        printf("Failed ejecting CD-ROM.\n");

    sleep(5);
    if (!ioctl(fd, CDROMCLOSETRAY, NULL))
        printf("Closed CD-ROM successfully.\n");
    else
        printf("Failed closing CD-ROM.\n");

    close(fd);
    return 0;
}
巨大八爪鱼
武林盟主 二十一級
回復
4樓 發表於:2015-7-15 22:24
[octopus@pc3 cdrom]$ ./cdrom
Ejected CD-ROM successfully.
Closed CD-ROM successfully.
[octopus@pc3 cdrom]$

回覆帖子
內容:
用戶名: 您目前是匿名發表。
驗證碼:
看不清?換一張
(快捷鍵:Ctrl+Enter)
本帖信息
點擊數:1406 回複數:3
作者:巨大八爪鱼
最後回覆:巨大八爪鱼
最後回復時間:2015-7-15 22:24
公告板