主题 : open("/dev/dsp" , O_RDWR)失败 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 5447
精华: 0
发帖: 34
金钱: 325 两
威望: 313 点
综合积分: 68 分
注册时间: 2009-04-23
最后登录: 2012-08-22
楼主  发表于: 2009-05-19 21:47

 open("/dev/dsp" , O_RDWR)失败

如题,在友善最新的2.6.29内核上,

open("/dev/dsp" , O_RDWR)失败。

没法进一步录音和放音。

怎么解决?
[ 此帖被wangzai368在2009-05-19 21:58重新编辑 ]
级别: 新手上路
UID: 5447
精华: 0
发帖: 34
金钱: 325 两
威望: 313 点
综合积分: 68 分
注册时间: 2009-04-23
最后登录: 2012-08-22
1楼  发表于: 2009-05-19 21:53
自己顶一下
级别: 侠客
UID: 944
精华: 3
发帖: 71
金钱: 22760 两
威望: 4838 点
综合积分: 202 分
注册时间: 2008-06-27
最后登录: 2017-07-16
2楼  发表于: 2009-05-19 22:36
总得说说具体是啥错误嘛, errno=?
级别: 新手上路
UID: 5447
精华: 0
发帖: 34
金钱: 325 两
威望: 313 点
综合积分: 68 分
注册时间: 2009-04-23
最后登录: 2012-08-22
3楼  发表于: 2009-05-20 18:02

 回 2楼(hulifox008) 的帖子

就是打开时返回的文件描述符dsp_fd<0.
其它我也不知道啊
级别: 新手上路
UID: 5447
精华: 0
发帖: 34
金钱: 325 两
威望: 313 点
综合积分: 68 分
注册时间: 2009-04-23
最后登录: 2012-08-22
4楼  发表于: 2009-05-21 10:35
怎么没有回复了啊。
在做毕设,毕业临近,急啊。。
级别: 侠客
UID: 944
精华: 3
发帖: 71
金钱: 22760 两
威望: 4838 点
综合积分: 202 分
注册时间: 2008-06-27
最后登录: 2017-07-16
5楼  发表于: 2009-05-21 10:44
dsp_fd 返回小于0,会有一个具体的数字,而这个数字就代表一个错误码,可以给你更多的出错信心啊,然后你可以试着看看driver里面哪个地方返回这个错误
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
6楼  发表于: 2009-05-21 11:28
参考下面的例子
复制代码
  1. #include <errno.h>
  2. dsp_fd = open("/dev/dsp", O_RDWR);
  3. if(dsp_fd < 0)
  4. {
  5.     perror("Error: open /dev/dsp failed!");
  6.     printf("error no = %d\n", errno);
  7. }
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 5447
精华: 0
发帖: 34
金钱: 325 两
威望: 313 点
综合积分: 68 分
注册时间: 2009-04-23
最后登录: 2012-08-22
7楼  发表于: 2009-05-22 12:58
可以打开了。
方法是:

dsp_fd = open("/dev/dsp", O_RDWR);
改为:
dsp_fd = open("/dev/dsp", O_RDONLY,0777);

应该是读写权限问题,以只读方式或者只写方式打开即可。权限参数0777后来证明不写也可以。
另外在2.6.29内核上录音时,:
1 、声道数设置不了,默认为2声道;
2、采样率可以设置;
3、采样位数也可以设置。