找回密码
 注册
查看: 1037|回复: 13

打开和关闭光驱的门,调用哪个函数?

[复制链接]
发表于 2005-7-5 18:08:19 | 显示全部楼层 |阅读模式
想写个类似的模块,哪位写过?
发表于 2005-7-5 18:52:11 | 显示全部楼层
设备相关的东西,很容易想到ioctl吧:

from man ioctl_list:


       0x00005301  CDROMPAUSE             void
       0x00005302  CDROMRESUME            void
       0x00005303  CDROMPLAYMSF      const struct cdrom_msf *
       0x00005304  CDROMPLAYTRKIND        const struct cdrom_ti *
       0x00005305  CDROMREADTOCHDR        struct cdrom_tochdr *
       0x00005306  CDROMREADTOCENTRY      struct cdrom_tocentry *       // I-O
       0x00005307  CDROMSTOP              void
       0x00005308  CDROMSTART             void
       0x00005309  CDROMEJECT             void
       0x0000530A  CDROMVOLCTRL      const struct cdrom_volctrl *
       0x0000530B  CDROMSUBCHNL      struct cdrom_subchnl *        // I-O
       0x0000530C  CDROMREADMODE2         const struct cdrom_msf * // MORE
       0x0000530D  CDROMREADMODE1         const struct cdrom_msf * // MORE
       0x0000530E  CDROMREADAUDIO         const struct cdrom_read_audio *    // MORE
       0x0000530F  CDROMEJECT_SW          int
       0x00005310  CDROMMULTISESSION      struct cdrom_multisession *   // I-O
       0x00005311  CDROM_GET_UPC          struct { char [8]; } *
       0x00005312  CDROMRESET             void
       0x00005313  CDROMVOLREAD      struct cdrom_volctrl *
       0x00005314  CDROMREADRAW      const struct cdrom_msf * // MORE
       0x00005315  CDROMREADCOOKED        const struct cdrom_msf * // MORE
       0x00005316  CDROMSEEK              const struct cdrom_msf *
回复

使用道具 举报

 楼主| 发表于 2005-7-6 23:36:52 | 显示全部楼层
我可不可以直接在用户态open("dev/cdrom",...)这样来弄?
                                  ......表示对cdrom操作的宏定义
回复

使用道具 举报

发表于 2005-7-7 09:08:37 | 显示全部楼层
不能,open只能返回设备句柄,给ioctl用。
回复

使用道具 举报

发表于 2005-7-7 23:16:53 | 显示全部楼层
Windows下就方便多了
回复

使用道具 举报

发表于 2005-7-7 23:48:45 | 显示全部楼层

Re: 打开和关闭光驱的门,调用哪个函数?

[quote:f0b8651fd0="zjasan"]想写个类似的模块,哪位写过?[/quote]
比较笨的方法弹出光驱
system("eject")
但我不知道怎么把光驱关闭.
回复

使用道具 举报

发表于 2005-7-8 20:29:22 | 显示全部楼层
我想我的光驱要弹出了,肯定是不能自己回去的。
回复

使用道具 举报

 楼主| 发表于 2005-7-9 00:31:24 | 显示全部楼层
这些方法不解决根本问题,怎么使用低层的函数呢??比如cdrom_open,init_cdrom_command等??
回复

使用道具 举报

发表于 2005-7-9 10:04:38 | 显示全部楼层
上面有兄弟说过了。去查找一下用 ioctl 操作光驱的参数吧。
回复

使用道具 举报

发表于 2005-7-9 21:47:59 | 显示全部楼层
嘿嘿~

很简单

弹出 :system("eject");

收回 :system("eject -t ");

回复

使用道具 举报

发表于 2005-7-10 00:33:50 | 显示全部楼层
-bash: eject: command not found  
回复

使用道具 举报

发表于 2005-7-10 08:03:44 | 显示全部楼层
ft……

你编译一个安上不就行了嘛~~~
回复

使用道具 举报

发表于 2005-7-10 11:12:02 | 显示全部楼层
ft
root 密码忘记了     
回复

使用道具 举报

发表于 2005-7-13 00:24:10 | 显示全部楼层
[code:1]
//使用方法应该是 cdromEject /dev/cdrom
#include <fcntl.h>
#include <linux/cdrom.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>


int main(int argc, char *argv[])
{
        int cdrom;

        if (argc != 2)
        {
                printf("Usage: cdromEject <cdrom device name>\n");
                exit(1);
        }

        cdrom = open(argv[1], O_RDONLY);
        /* Eject the CD-ROM */
        ioctl(cdrom, CDROMEJECT);
        /* Close device file */
        close(cdrom);

        return (0);
}

其他的查一下cdrom.h中的操作代码.
[/code:1]
忘了还是使用非阻塞方式打开比较好。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2025-2-8 05:51 , Processed in 0.027586 second(s), 15 queries .

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表