当前位置:   article > 正文

Linux中fifo位置,[转载]RTLinux中的fifo [2007年02月06日]

createfifo size

头文件:

#include

相关函数:

创建FIFO:

int rtf_create(unsigned int fifo, int size);

参数:size指定fifo大小。fifo参数是这一fifo的标识符(由用户指定),系统内唯一,其值必须小于RTF_NO.

返回值:成功为0.

为FIFO创建一个处理器(1):

int rtf_create_handler(unsigned int fifo, int (*

handler)());

参数:指定的FIFO,及为其指定的处理器。

注意:rtf_create_handler函数为指定的FIFO创建一个处理器。当数据被用户空间的程序(linux进程)读取或写入的时候,这个处理器将被执行。这一处理器的优先级与linux的优先级一样,是最低的。

为FIFO创建一个处理器(2):

int rtf_create_rt_handler(unsigned int fifo, int (*

handler)());

参数,指定的FIFO,及为其指定的处理器。

注意:rtf_create_rt_handler函数为指定的FIFO创建一个处理器,当在指定的FIFO上进行rtf_get或rtf_put时,处理器将被调用。即,当实时进程(内核空间)对指定fifo进行读写时,此处理器将被调用。处理器将在调用rtf_put或rtf_get的任务的上下文中执行,即在内核空间中执行。可以通过信号号,使处理器动作同步:在线程中使用sem_wait(),然后在处理器中释放该信号量。

总结:FIFO是一种机制,当作字符设备来使用。用于在实时的线程间,或实时线程与linux进程间,通信。实时模式使用rtf_put(),rtf_get()访问fifo;linux进程使用标准的字符设备访问函数:read(),write(),select()等。

销毁fifo:

int rtf_destroy(unsigned int fifo);

清空fifo:

int rtf_flush(unsigned int fifo);

从fifo中读取数据:

int rtf_get(unsigned int fifo, char * buf, int count);

参数:fifo,被读取的fifo;

buf指定目的地址,count指定读取的数据大小。

注意:此函数与rtf_put只用于实时任务,而linux进程则使用read(),write()来读取/写入fifo.

总结:rtf_get()通常与rtf_create_handler来联合使用来同步处理接收到的数据。

例程即是如此:指定一fifo只用于linux进程写消息,实时任务读消息。将此fifo与一handler绑定。在handler中从这一fifo中读消息。这样,当linux进程写入消息后,handler马上被触发执行(注意:优先级最低),从fifo中用rtf_get()读出消息,达到同步。

问题:由于优先级最低,是否会被耽误。

例程片断:

c[2] = rtf_create(3, 200);//创建fifo;

rtf_create_handler(3, &my_handler);//绑定handler;

if ((ctl = open("/dev/rtf3", O_WRONLY)) < 0){}

//打开设备

if (write(ctl, &msg, sizeof(msg)) < 0){}//向设备中写消息

此时handler被调用:

struct my_msg_struct msg;

if ((err = rtf_get (fifonum, &msg, sizeof(msg))) ==

sizeof(msg))//handler中接收消息

向fifo中写数据:

int rtf_put(unsigned int fifo, char * buf, int count);

为FIFO安装ioctl():

int rtf_link_user_ioctl(unsigned int fifo, int

(*handler)(unsigned int fifo, unsigned int cmd, unsigned long

arg));

说明:此函数将,对字符设备fifo的ioctl调用,传递给handler功能。ioctl的参数同时传给handler,handler的返回值传回ioctl(),作为其返回值。

将一对fifo绑定成一双向fifo:

int rtf_make_user_pair(unsigned int N, unsigned int

P);

说明:rtf_make_user_pari()改变fifo

N的行为:当用户空间程序读取/dev/rtfN时,访问传给fifo P,即读取fifo

p。当用户空间程序写入/dev/rtfN时,将访问fifo N.

即,对于用户空间程序来说,只需访问一个设备:/dev/rtfN即可,而实际对/dev/rtfN的读,写,分别传递给两个fifo:

fifo P和fifo N.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/539463
推荐阅读
相关标签
  

闽ICP备14008679号