读书人

编程遇到异常百思不得其解

发布时间: 2012-03-24 14:00:46 作者: rapoo

编程遇到错误,百思不得其解,请指教
这是一个弹出光驱的程序,有三个模块组成,把打开设备做成函数便于其他程序的调用,但是不知道哪里出了问题,在运行时总是提示 CDROMEJECT ioctl failed: Bad file descriptor ,不知该如何解决,望高人赐教

/*function,h*/
#ifndef _FUNCTION_H
#define _FUNCTION_H

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/ioctl.h>

#include <linux/cdrom.h>

int open_device();

/* CD驱动器对应的设备文件 */

#define DEVICE "/dev/cdrom "

#endif


/*function.c*/
#include "function.h "
int open_device()
{
int fd;
fd = open(DEVICE, O_RDONLY);

if (fd < 0) {

perror( "unable to open " DEVICE);

exit(1);

}
return fd;
}

/*eject.c*/
#include "function.h "

int main()

{

int fd;

int status;

/* 打开设备 */

open_device();

/* 退出光盘 */

status = ioctl(fd, CDROMEJECT);

if (status != 0) {

perror( "CDROMEJECT ioctl failed ");

exit(1);

}

/* 关闭设备 */

status = close(fd);

if (status != 0) {

perror( "unable to close " DEVICE);

exit(1);

}
return 0;

}


然后运行 gcc function.c eject.c -o eject
./eject
即提示 CDROMEJECT ioctl failed: Bad file descriptor
不知如何解决?


[解决办法]
fd = open_device();

[解决办法]
open_device();
status = ioctl(fd, CDROMEJECT);//?
呵呵
你是否真是那样?
fd = open_device();
[解决办法]
status = ioctl(fd, CDROMEJECT);//这里fd没有赋值,系统不知道你要做什么

读书人网 >UNIXLINUX

热点推荐