当前位置: 技术问答>linux和unix
高分求助有关利用Linux的系统调用read()实现
来源: 互联网 发布时间:2016-01-17
本文导语: 做一个简单的linux系统下音频的输入,需要调用 int read(int fd, char *buf, size_t count);来实现语音从麦克风的输入,但是一般的做法就是单独设置一个缓冲区例如:buffer[100],但是我想作一个循环队列来实现,能让录...
做一个简单的linux系统下音频的输入,需要调用
int read(int fd, char *buf, size_t count);来实现语音从麦克风的输入,但是一般的做法就是单独设置一个缓冲区例如:buffer[100],但是我想作一个循环队列来实现,能让录音源源不断的输入,在输入的同时进行其他的对语音的分析,分析完的语音就可以抛弃,这样循环队列中永远不会满,但是我遇到的困难是你采用read的时候要输入缓冲区的地址以及字节的大小,如果循环队列的话如何实现read调用永不停止一直在输入,循环队列的front指针和rear指针如何配合以及read调用count如何选择,因为你的count一旦指定,当read完count个字节数后,系统read调用就停止,这是我遇到的困难,那位高手可以说一下思路。
比如说我的循环队列是
tyedef struct{
char * base;
int front;
int rear;
}sq;
sq.base=(char *)malloc(MAXSIZE);
那系统调用read()如何实现这一功能
int read(int fd, char *buf, size_t count);来实现语音从麦克风的输入,但是一般的做法就是单独设置一个缓冲区例如:buffer[100],但是我想作一个循环队列来实现,能让录音源源不断的输入,在输入的同时进行其他的对语音的分析,分析完的语音就可以抛弃,这样循环队列中永远不会满,但是我遇到的困难是你采用read的时候要输入缓冲区的地址以及字节的大小,如果循环队列的话如何实现read调用永不停止一直在输入,循环队列的front指针和rear指针如何配合以及read调用count如何选择,因为你的count一旦指定,当read完count个字节数后,系统read调用就停止,这是我遇到的困难,那位高手可以说一下思路。
比如说我的循环队列是
tyedef struct{
char * base;
int front;
int rear;
}sq;
sq.base=(char *)malloc(MAXSIZE);
那系统调用read()如何实现这一功能
|
sq.front=0;
sq.rear=MAXSIZE;
while ( 1 )
{
read ( fd , buf , count );
if ( sq.front+count >= sq.rear )
sq.front = 0;
memcpy ( sq.base+sq.front , buf , count );
sq.front += count;
}
这样行不?
sq.rear=MAXSIZE;
while ( 1 )
{
read ( fd , buf , count );
if ( sq.front+count >= sq.rear )
sq.front = 0;
memcpy ( sq.base+sq.front , buf , count );
sq.front += count;
}
这样行不?
|
楼上做的很对。最好初始化一下链表,最开始的时候头指向尾,还要做一个循环判断,万一尾巴赶上了头要做一些处理