linux c 驱动编程

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


#define length 1
#define rate 0x5622
#define size 16
#define channels 1

unsigned char buf[length*rate*size*channels/8];

int main(){

int fd ,fr;
int status;
int arg;
fd=open("/dev/dsp",O_RDWR);
fr=open("china.wav",O_RDWR);

if(fd<0){
perror("open of /dev/dsp failed");
exit(1);


}

printf("1\n");
arg=size;//璁剧疆姣忕鐨勬瘮鐗规暟
status=ioctl( fd,SOUND_PCM_WRITE_BITS,&arg);
if(status==-1){

perror("sound_pcm_write_btts ioctl failed");
close(fd);
close(fr);
exit(1);
}
printf("2\n");
if(arg!=size){
perror("unable to set sample size");
exit(1);
}
arg=channels;//璁剧疆棰戦亾

printf("3\n");
status=ioctl((int)fd,SOUND_PCM_WRITE_CHANNELS,&arg);

if(status==-1){
perror("sound_pcm_write_channels ioctl failed");

exit(1);
}

if(arg!=channels){
perror("unable to set number of channels");
exit(1);
}

arg=rate;//璁剧疆閲囨牱鐜�
status=ioctl((int)fd,SOUND_PCM_WRITE_RATE,&arg);


if(status==-1){
perror("sound_pcm_write_rate failed");
exit(1);
}

printf("4\n");

FILE * fdr=fdopen(fr,"r");//io鍙ユ焺鍒癷o娴佺殑杞崲
FILE* fdw=fdopen(fd,"w");//

printf("5\n");
int tag=fread(buf,sizeof(buf),1,fdr);


while(!feof(fdr)){


printf("6\n");

status=fread(buf,sizeof(buf),1,fdr);

if(status <0){

printf("staus error");
goto tt;

}

status= fwrite(buf,sizeof(buf),1,fdw);

// ioctl(fd,I_FLUSH,FLUSHR);


}

tt:
fclose(fdr);
fclose(fdw);
close(fd);
close(fr);


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值