macbook新手使用教程求教FIFO的使用

> 三菱FX系列PLC教程 49 —— FX系列的先入先出写入指令(FIFO)
三菱FX系列PLC教程 49 —— FX系列的先入先出写入指令(FIFO)
三菱FX系列PLC教程
播放:3330
播放:2020
播放:3753
播放:2201
播放:2572
播放:2055
播放:2040
播放:3364
播放:2310
播放:2877
播放:1983
播放:2514
播放:2640
播放:2315
播放:2145
播放:2028
播放:3514
播放:1939
播放:2128
播放:2906
播放:4131
播放:6888
播放:5149
播放:5359
播放:2862
播放:3014
播放:3026
播放:2117
播放:3497
播放:2583
播放:2234
播放:2220
播放:2097
播放:2262
播放:2567
播放:3482
播放:1865
播放:2515
播放:2335
播放:1904
播放:1982
播放:3097
播放:2283
播放:2021
播放:1425
播放:1648
播放:1955
播放:2012
播放:3487
播放:2179
播放:3941
播放:2037
播放:4680
播放:2358
播放:2440
播放:2408
播放:1983
播放:2221
播放:4219
播放:1945
播放:2460
播放:2073
播放:1841
播放:4905
播放:1971
播放:5175
播放:2010
播放:2061
播放:1914
播放:2614
播放:3892
播放:2602
播放:3103
播放:2277
播放:2485
播放:2491
播放:5812
播放:2858
播放:3804
播放:8056
验 证 码:
《电子产品世界》杂志社 版权所有 北京东晓国际技术信息咨询有限公司
Copyright & ELECTRONIC ENGINEERING & PRODUCT WORLD. All rights reserved.
京ICP060382号
北京市公安局备案:全部答案(共1个回答)
流动比率=流动资产/流动负债,分子中包含货币资金、应收款项、存货等全部流动资产,存货是影响该比率的一个因素。
速动比率=(流动资产-存货)/流动负债,分子从流动...
PE表示在维持相同利润条件下需要多少年才能收回投资。
对投资者来说,PE越高,表示越长时间收回投资。
对股票来说PE越高,表示投资者对公司前景看好。因为看好公司...
杠杆自由现金流(Levered Free Cash Flow):自由现金流可理解为经营活 动产生的现金, 在考虑满足营运资本和资本 开支的需要并支付财务费用后,...
风险投资家对项目的一般要求是:(1)项目应具有一定规模,在美国一般不少于25万美元;(2)风险是可以认定的和可以预知的;(3)项目业务必须有短期内大幅度增长的潜...
答: 大家有什么好的互联网理财平台推荐吗?最好是可以进行投资理财,也可以学习理财知识的。
答: 选择好的公司进行股权投资,一般三年内可在美国或香港上市,回报率在3倍以上,如在美国纳斯达克或纽约交易所可获得十倍甚至更高的收益。例如:百度、杨陵博迪森、中星微电...
答: 选择一个风险和收益自己能够承受了的品种进行操作 一般来说 风险大的品种 收益会高一些 这个自己选择好就OK (Q)
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区虚拟JTAG实例演示之FIFO简单读写视频教程_视频在线观看-中电网
虚拟JTAG实例演示之FIFO简单读写
视频排行榜
播放次数:442
简介:通过一个实例来演示怎么在具体项目中使用虚拟JTAG,本例通过虚拟JTAG来操作FPGA内部的FIFO。
[上一篇:]
[下一篇:]FIFO使用经验2(读写使能与级联) - 菜鸟要飞的个人空间 - 中国电子顶级开发网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台
- Powered by X-Space
FIFO使用经验2(读写使能与级联)
& 11:27:45
/ 个人分类:
FIFO写数据时,写使能与数据是对齐的,读数时,在波形上看,数据比读使能晚一个周期。若是FIFO级练的话,后一级FIFO的写使能要比上一级FIFO的读使能晚一周期,这样才能衔接上。FIFO有时被称为命名管道。管道只能由相关进程使用,但是,通过FIFO,不相关进程也能交换数据。FIFO的路径名存在于文件系统中,一般的文件I/O函数都可用于FIFO。
创建FIFO类似于创建文件:
#include &sys/types.h&
#include &sys/stat.h&
int& mkfifo (const char* pathname,& mode_t mode) ;
其中pathname是一个普通的Unix路径名,它是该FIFO的名字。
mode参数指定文件权限位,类似于open的第二个参数
mkfifo已隐含指定O_CREAT|O_EXCL。即它要么创建一个新的FIFO,要么返回一个EEXIST错误。如果不希望创建一个新的FIFO,那就应调用open而不是mkfifo。
要打开一个已存在的FIFO或创建一个新的FIFO,应先调用mkfifo,检查它是否返回EEXIST错误,若返回则改为调用open。
当打开(open)一个FIFO时,非阻塞标志产生下列影响:
1、一般情况,若当前尚无任何进程打开FIFO来写,那么打开该FIFO读的进程将阻塞。同样,只写open要阻塞到某个其他进程为读而打开它。
2、如果指定了O_NONBLOCK,则只读open立即返回。但是,若当前尚无任何进程打开FIFO来读,那么只写open将出错返回-1。
(管道、FIFO都可设置为非阻塞。)
类似于管道,若用write写一个尚无进程为读而打开的FIFO,则产生信号SIGPIPE。若用read读一个已关闭的FIFO,则会读到一个文件结束标志。
【注意】写操作的原子性
一个给定的FIFO有多个写进程是很常见的。(其名字在文件系统名中,所有进程都可见)
若不希望多个进程所写数据互相穿插,则需要考虑原子写操作。常量PIPE_BUF说明了可被原子地写到FIFO的最大数据量。(进程一次向FIFO写入的数据大小不要超过PIPE_BUF)
FIFO的用途:用于客户进程--服务器进程应用程序中
FIFO的真正优势在于:服务器可以是一个长期运行的进程(例如守护进程),而且与其客户可以无亲缘关系。
作为服务器的守护进程以某个众所周知的路径名创建一个FIFO,并打开该FIFO来读。此后某个时刻启动的客户打开该FIFO来写,并将其请求通过该FIFO发送出去。(客户到服务器)
每个客户在启动时创建自己的FIFO,所用的路径名含有自己的进程ID。每个客户把自己的请求写入服务器的众所周知的FIFO中,该请求含有客户的进程ID以及一个请求文件路径名,服务器根据客户进程ID可以知道客户FIFO的路径名。
//注意:此为迭代型服务器。若有多个客户端请求,服务器会先处理完一个,再处理下一个。
#include &unistd.h&
#include &sys/types.h&
#include &sys/stat.h&
#include &fcntl.h&
#include &errno.h&
#include &string.h&
#include &stdio.h&
#define MAXLINE 1024
#define SERV_FIFO &./fifo.serv&
#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
//在文件系统中创建的FIFO的访问权限位
main(int argc, char** argv)
//从自己的FIFO读
//向进程对应的FIFO写
//文件描述符
buff[MAXLINE] ;
fifoname[MAXLINE] ;
//创建服务器的FIFO
if ((mkfifo(SERV_FIFO, FILE_MODE) & 0) && (errno != EEXIST))
printf(&can't create %s&, SERV_FIFO) ;
//打开服务器FIFO的读、写端
readfifo = open(SERV_FIFO, O_RDONLY, 0) ;
//读取来自客户端的请求
while ((n = read(readfifo, buff, MAXLINE)) & 0)
if (buff[n-1] == '\n')
buff[--n] = '\0' ;
//获取客户端的进程ID号
if ((ptr = strchr(buff, ' ')) == NULL)
printf(&bogus request: %s&, buff) ; //伪造的客户请求
*ptr++ = 0 ;
//根据客户端进程ID打开客户端FIFO
snprintf(fifoname, sizeof(fifoname), &./fifo.%s&, buff) ;
if ((writefifo = open(fifoname, O_WRONLY, 0)) & 0)
printf(&cannot open : %s&, fifoname) ;
//向客户端FIFO中写入客户所请求的文件内容
if ((fd = open(ptr, O_RDONLY)) & 0)
//打开文件出错,向客户端返回错误信息
snprintf(buff+n, sizeof(buff) - n, &:can't open, %s\n&, strerror(errno)) ;
n = strlen(ptr) ;
write(writefifo, ptr, n) ;
close(writefifo) ;
while ((n = read(fd, buff, MAXLINE)) & 0)
write(writefifo, buff, n) ;
close(writefifo) ;
close(fd) ;
//客户端知道服务器端FIFO的名字,且服务器知道它维护的FIFO的名字是
fifo.进程ID
//---------------客户端-------------
#include &unistd.h&
#include &sys/types.h&
#include &sys/stat.h&
#include &fcntl.h&
#include &errno.h&
#include &string.h&
#include &stdio.h&
#define MAXLINE 1024
#define SERV_FIFO &./fifo.serv&
#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
main(int argc, char** argv)
fifoname[MAXLINE] ;
buff[MAXLINE] ;
//创建自己的FIFO 用于接收服务器端的数据
pid = getpid() ;
snprintf(fifoname, sizeof(fifoname), &./fifo.%ld&, (long)pid) ;
if (mkfifo(fifoname, FILE_MODE) & 0 && (errno != EEXIST))
printf(&can't create %s&, fifoname) ;
//构造请求消息
snprintf(buff, sizeof(buff), &%ld &, (long)pid) ;
len = strlen(buff) ;
ptr = buff +
fgets(ptr, MAXLINE - len, stdin) ; //从键盘获取请求文件路径
len = strlen(buff) ;
//打开服务器的FIFO 向其中写入消息
writefifo = open(SERV_FIFO, O_WRONLY, 0) ;
write(writefifo, buff, len) ;
//打开自己的FIFO 读取来自服务器的应答数据
readfifo = open(fifoname, O_RDONLY, 0) ;
while ((n = read(readfifo, buff, MAXLINE)) & 0)
write(STDOUT_FILENO, buff, n) ;
close(readfifo) ;
unlink(fifoname) ;
注意,此程序有一些不足:服务器进程不能判断一个客户进程是否崩溃终止,这就使得客户进程专用的FIFO会遗留在文件系统中。
此为迭代式服务器,另一种设计是并发服务器。即每个客户一个子进程服务器。每当有一个客户请求到达时,这种服务器就让主进程调用fork派生出一个新的子进程。该新子进程处理相应的客户请求,直到完成为止。
管道和FIFO的特征之一是它们的数据是一个字节流。这是UNIX的原生I/O模型。进程往其中写入的是字节流,系统不对它作解释。如果需要某种解释,写进程和读进程就得先验地同意这种解释,并亲自去做。(即我们可以人为地定义规则,对字节流解释)
本文已收录于以下专栏:
相关文章推荐
写脚本的时候用到FIFO,不是很会,就学习了下。下面是简介:
FIFO也称为有名管道,它是一种文件类型。FIFO简单理解,就是它能把两个不相关的进程联系起来,FIFO就像一个公共通道...
管道实际上在内核创建了一个i node,和一个指向它的固定大小内核缓冲区(可以理解为类似cache,但读写不分开),传入的两个文件描述符就都指向这段缓冲区,这样读管道的0文件描述符和写它的1文件描述符...
无名管道应用的一个重大限制是它没有名字,因此,只能用于具有亲缘关系的进程间通信,在有名管道(named pipe或FIFO)提出后,该限制得到了克服。FIFO不同于管道之处在于它提供一个路径名与之关联...
Linux进程通信:命名管道FIFO小结
共享存储允许两个或更多进程共享一给定的存储区。因为数据不需要在客户进程和服务器进程之间复制,所以这是最快的一种IPC。
一旦这样的内存区映射到共享它的进程的地址空间,这些进程间数据的传递就不...
一般,进程之间交换信息的方法只能是经由fork或exec传送打开文件,或者通过文件系统。而进程间相互通信还有其他技术——IPC(InterProcess Communication)
(因为不同...
信号量(semaphore)是一个计数器,用于多进程对共享数据的访问。
为了获得共享资源,进程需要执行下列操作:
⑴ 测试控制资源的信号量。
⑵ 若此信号量的值为正,则进程可以使用该资源。...
消息队列是消息的链表,存放在内核中并由消息队列标识符标识。在某个进程往一个队列写入消息之前,并不需要另外某个进程在该队列上等待消息的到达。这跟管道和FIFO是相反的,对后两者来说,除非读出者...
有三种IPC我们称作XSI IPC,即消息队列、信号量、共享存储器。它们之间有很多相似之处。
XSI IPC源自systemV的IPC功能,由于XSI IPC不使用文件系统的...
UNIX线程同步
当多个控制线程共享相同的内存时,需要确保每个线程看到一致的数据视图,这就需要对这些线程进行同步。
同步就是要保证每次各线程对数据的操作总是以顺序一致的方式出现的。
竞争的原因
他的最新文章
讲师:王哲涵
讲师:韦玮
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 webstorm新手使用教程 的文章

 

随机推荐