fifoc语言程序(c++ fifo)

本篇文章给大家谈谈fifoc语言程序,以及c++ fifo对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

1、怎样用C语言编写简单的FIFO置换算法2、C语言模拟FIFO算法,随机生成320条指令,有四块物理块,为什么错了?3、c语言,打开fifo文件时就没有反应,也不报错,就像是被暂停了一样,请问是怎么个情况?代码如下。4、用单片机如何把fifo中的数据读出来,通过串口发出。c语言程序。下面的汇编不太明白

怎样用C语言编写简单的FIFO置换算法

#include “stdio.h”

#include “malloc.h”

#define OK 1

#define ERROR 0

#define NULL 0

#define status int

typedef int Elemtype;

/*这个定义的是队列的元素的数据结构*/

typedef struct tailDATA{

Elemtype data;/*这个存放的是队列元素的值*/

struct tailDATA *next;//指向下一个元素

}datatail,*map;

/*以下定义的是队列头的数据结构*/

typedef struct Tail{

/*说明:对队列进行操作的时候,插入的时候是对front操作,删除*/

Elemtype data;/*这个记载的是队列的元素的个数*/

map front;/*这个是队列的头*/

map rear;/*这个是队列的尾*/

}tail,*mappath;

/*以下定义的就是操作了,初始话的操作就不想做了,直接写个插入和删除等的一些的算法就可以了*/

status inserttail(mappath T,map P)

{/*这个函数的功能是将一个个已知的元素插入队列中*/

if(T==NULL)

{

T=(mappath)malloc(sizeof(tail));

T-data=0;

T-front=NULL;

T-rear=NULL;

}

if(!P) return OK;

T-rear-next=P;

T-rear=P;

if(!(T-front)) T-front=P;

return OK;

}

status insertdatatail(mappath T,int a)

{/*这个函数将一个元素插入队列中,其实这个函数是没有必要的,但是为了方便起见,还是写了个*/

if(T==NULL)

{

T=(mappath)malloc(sizeof(tail));

T-data=0;

T-front=NULL;

T-rear=NULL;

map linshi=(map)malloc(sizeof(datatail));

linshi-data=a;

linshi-next=NULL;

T-front=linshi;

T-rear=linshi;

T-data=1;

return OK;

}

map linshi=(map)malloc(sizeof(datatail));

linshi-data=a;

linshi-next=NULL;

T-rear-next=linshi;

T-rear=linshi;

if(!(T-front)) T-front=linshi;

T-data++;

return OK;

}

status deltail(mappath T)

{/*因为对队列进行删除操作的时候,基本上是没有什么条件,就是对front做一些相应的操作就可以了

,所以他的函数列表也就比较少了*/

if(!T) return ERROR;/*如果队列本来就是空的,那么就返回一个错误的信息*/

if(T-front==T-rear)

{/*如果队列只有一个元素,就执行下面的操作,防止出现了错误*/

map linshi=T-front;

free(linshi);

T-data=0;

T-front=NULL;

T-rear=NULL;

return OK;

}

map linshi=T-front;

T-front=T-front-next;

T-data–;

free(linshi);

return OK;

}

status puttail(mappath T)

{/*这个是对一个已经存在的队列进行输出*/

if(!T) return ERROR;

printf(“the tail’count is %d\n”,T-data);

int count=T-data;map q=T-front;

for(int i=0;icount;i++)

{

printf(“%d “,q-data);

q=q-next;

}

return OK;

}

int main()

{

printf(“hello,world!\n”);

mappath q=NULL;int count1=0;int dataa=0;

printf(“please input a number to the count of tail\n”);

scanf(“%d”,count1);

for(int i=0;icount1;i++)

{

printf(“please input a number to tail\n”);

scanf(“%d”,dataa);

insertdatatail(q,dataa);

}

puttail(q);

deltail(q);

puttail(q);

return 0;

}

C语言模拟FIFO算法,随机生成320条指令,有四块物理块,为什么错了?

这可是hen宝贵的啊

#include

#include

#include

#include

#define Bsize 4

typedef struct BLOCK//声明一种新类型——物理块类型

{

int pagenum;//页号

int accessed;//访问字段,其值表示多久未被访问

}BLOCK;

int pc;//程序计数器,用来记录指令的序号

int n;//缺页计数器,用来记录缺页的次数

static int temp[320];//用来存储320条随机数

BLOCK block[Bsize]; //定义一大小为4的物理块数组

//*************************************************************

void init( ); //程序初始化函数

int findExist(int curpage);//查找物理块中是否有该页面

int findSpace( );//查找是否有空闲物理块

int findReplace( );//查找应予置换的页面

void display ( );//显示

void suijishu( );//产生320条随机数,显示并存储到temp[320]

void pagestring( );//显示调用的页面队列

void OPT( );//OPT算法

void LRU( );// LRU算法

void FIFO( );//FIFO算法

//*************************************************************

void init( )

{

for(int i=0;iBsize;i++)

{

block[i].pagenum=-1;

block[i].accessed=0;

pc=n=0;

}

}

//————————————————————-

int findExist(int curpage)

{

for(int i=0; iBsize; i++)

{

if(block[i].pagenum == curpage )

return i;//检测到内存中有该页面,返回block中的位置

}

return -1;

}

//————————————————————-

int findSpace( )

{

for(int i=0; iBsize; i++)

{

if(block[i].pagenum == -1)

return i;//找到空闲的block,返回block中的位置

}

return -1;

}

//————————————————————-

int findReplace( )

{

int pos = 0;

for(int i=0; iBsize; i++)

{

if(block[i].accessed block[pos].accessed)

pos = i;//找到应予置换页面,返回BLOCK中位置

}

return pos;

}

//————————————————————-

void display( )

{

for(int i=0; iBsize; i++)

{

if(block[i].pagenum != -1)

{ printf(” %02d”,block[i].pagenum);}

}

coutendl;

}

//————————————————————-

void suijishu( )

{ int flag=0;

cinpc;

cout”******按照要求产生的320个随机数:*******”endl;

for(int i=0;i320;i++)

{

temp[i]=pc;

if(flag%2==0) pc=++pc%320;

if(flag==1) pc=rand( )% (pc-1);

if(flag==3) pc=pc+1+(rand( )%(320-(pc+1)));

flag=++flag%4;

printf(” %03d”,temp[i]);

if((i+1)%10==0) coutendl;

}

}

//————————————————————-

void pagestring( )

{

for(int i=0;i320;i++)

{

printf(” %02d”,temp[i]/10);

if((i+1)%10==0) coutendl;

}

}

//————————————————————-

void OPT( )

{

int exist,space,position ;

int curpage;

for(int i=0;i320;i++)

{

if(i%100==0) getch( );

pc=temp[i];

curpage=pc/10;

exist = findExist(curpage);

if(exist==-1)

{

space = findSpace ( );

if(space != -1)

{

block[space].pagenum = curpage;

display( );

n=n+1;

}

else

{

for(int k=0;kBsize;k++)

{

for(int j=i;j320;j++)

{

if(block[k].pagenum!= temp[j]/10)

{

block[k].accessed = 1000;

}//将来不会用,设置为一个很大数

else

{

block[k].accessed = j;

break;

}

}

}

position = findReplace( );

block[position].pagenum = curpage;

display( );

n++;

}

}

}

cout”缺页次数:”nendl;

cout”缺页率:”(n/320.0)*100″%”endl;

}

//————————————————————-

void LRU( )

{

int exist,space,position ;

int curpage;

for(int i=0;i320;i++)

{

if(i%100==0) getch( );

pc=temp[i];

curpage=pc/10;

exist = findExist(curpage);

if(exist==-1)

{

space = findSpace( );

if(space != -1)

{

block[space].pagenum = curpage;

display( );

n=n+1;

}

else

{

position = findReplace( );

block[position].pagenum = curpage;

display( );

n++;

}

}

else block[exist].accessed = -1;//恢复存在的并刚访问过的BLOCK中页面accessed为-1

for(int j=0; j4; j++)

{block[j].accessed++;}

}

cout”缺页次数:”nendl;

cout”缺页率:”(n/320.0)*100″%”endl;

}

//————————————————————-

void FIFO( )

{

int exist,space,position ;

int curpage;

for(int i=0;i320;i++)

{

if(i%100==0) getch( );

pc=temp[i];

curpage=pc/10;

exist = findExist(curpage);

if(exist==-1)

{

space = findSpace( );

if(space != -1)

{

block[space].pagenum = curpage;

display( );

n=n+1;

}

else

{

position = findReplace( );

block[position].pagenum = curpage;

display( );

n++;

block[position].accessed–;

}

}

for(int j=0; jBsize; j++)

block[j].accessed++;

}

cout”缺页次数:”nendl;

cout”缺页率:”(n/320.0)*100″%”endl;

}

//*************************************************************

void main( )

{

int select;

cout”请输入第一条指令号(0~320):”;

suijishu( );

cout”*****对应的调用页面队列*******”endl;

pagestring( );

do

{

cout”****************************************”endl;

cout”——1:OPT 2:LRU 3:FIFO 4:退出—–“endl;

cout”****************************************”endl;

cout” 请选择一种页面置换算法:”;

cinselect;

cout”****************************************”endl;

init( );

switch(select)

{

case 1:cout”最佳置换算法OPT:”endl;

cout”*****************”endl;

OPT( );

break;

case 2:cout”最近最久未使用置换算法LRU:”endl;

cout”**************************”endl;

LRU( );

break;

case 3:cout”先进先出置换算法FIFO:”endl;

cout”*********************”endl;

FIFO( );

break;

default: ;

}

}while(select!=4);

}

你试试可以不,应该没问题的

要注意这是用C++编写的,你改一下就可以用了

c语言,打开fifo文件时就没有反应,也不报错,就像是被暂停了一样,请问是怎么个情况?代码如下。

你需要再写一个读的程序 一起运行。

FIFO的打开规则:

如果当前打开操作是为读而打开FIFO时,若已经有相应进程为写而打开该FIFO,则当前打开操作将成功返回;否则,可能阻塞直到有相应进程为写而打开该FIFO(当前打开操作设置了阻塞标志);或者,成功返回(当前打开操作没有设置阻塞标志)。

如果当前打开操作是为写而打开FIFO时,如果已经有相应进程为读而打开该FIFO,则当前打开操作将成功返回;否则,可能阻塞直到有相应进程为读而打开该FIFO(当前打开操作设置了阻塞标志);或者,返回ENXIO错误(当前打开操作没有设置阻塞标志)。

总之就是一句话,一旦设置了阻塞标志,调用mkfifo建立好之后,那么管道的两端读写必须分别打开,有任何一方未打开,则在调用open的时候就阻塞。

fifoc语言程序(c++ fifo)

用单片机如何把fifo中的数据读出来,通过串口发出。c语言程序。下面的汇编不太明白

这汇编程序等价于

sbit ef = P3^3;

sbit rst = P3^5;

sbit read = P3^7;

void main()

{

unsigned char tempP1;

TMOD = 0x21;

PCON |= 0x80;

TH1 = 0xFD;

TR1 = 1;

SCON = 0x50;

TI = 0;

read = 1;

rst = 0;

_nop_();

rst = 1;

while(1)

{

while(ef==0);

_nop_();

tempP1 = P1;

_nop_();

read = 1;

while(TI==0);

TI = 0;

SBUF = tempP1;

}

}

fifoc语言程序的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c++ fifo、fifoc语言程序的信息别忘了在本站进行查找喔。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年4月2日 17:15:24
下一篇 2024年4月2日 17:22:34

相关推荐

  • c语言改写模式,c语言实现修改功能

    c语言程序修改? 1、这个程序有4个错误,我都加粗了,第一个是m没有赋初值,第二个是while表达式中的ch=getchar()需要括号括起来,第三个是m=m*10+ch-0中的0也需要用单引号括起来,第四个是第2个while中为m!=0。 2、define容易造成误会,因为不符合一般的编程习惯,false 0, true 1;scanf放在你的那个地方是达…

    2024年5月23日
    3900
  • c语言控制代码的换码序列,c语言交换代码

    求C语言编程大神解答一下下面这个编程代码? k==5,用5去除125余0,所以r=125%5中r为0。由于!0为1,所以执行while循环体:先打印出5(k的值),再n=n/k==125/5=25;由于251则再打印出*号。这一循环结果输出是5*。 下面是我的代码,三个函数分别对应三个问题。 在实现基本要求的前提下,拓展了可以从键盘输入的功能,以下为各题代码…

    2024年5月23日
    5600
  • c语言扫描io脚状态,c语言端口扫描

    求51单片机的上升沿和下降沿C语言检测程序列子,端口就是普通IO口。 上升沿触发是当信号有上升沿时的开关动作,当电位由低变高而触发输出变化的就叫上升沿触发。也就是当测到的信号电位是从低到高也就是上升时就触发,叫做上升沿触发。 单片机怎么计算1s内下降沿的个数的C语言程序或者计算两个下降沿的时间(检测脉冲频率)计算1s内下降沿的个数方法是,一个定时器设置定时1…

    2024年5月23日
    4400
  • c语言mallloc使用的简单介绍

    C语言中使用malloc必须加#includemallo.h? 1、在C语言中使用malloc函数进行动态内存分配。malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void malloc(unsigned int num_bytes);功能:分配长度为num_bytes字节的内存块。 2、你可以看一下C语言那本…

    2024年5月23日
    4400
  • c语言三位小数,C语言三位小数

    怎样用C++语言输出精确到小数点后三位的数? 1、用C++语言输出精确到小数点后三位的数,可以参考下面给出的代码:coutsetiosflags(ios:fixed)setprecision(3)。其中 setiosflags中set是设置的意思。ios是iostream的缩写,即输入输出流。flags是标志的意思。 2、要精确到小数点后若干位,则数据类型为…

    2024年5月23日
    7300
  • c语言21点游戏,二十一点游戏代码c语言

    如何使用C语言编写简单小游戏? 1、数学知识:长方形的面积S=a*b 长方形周长L=2*(a+b)其中a b分别为长方形的宽和高。算法分析:长方形面积及周长均依赖于宽和高,所以先要输入宽高值,然后根据公式计算,输出结果即可。 2、/*也不知道你是什么级别的,我是一个新手,刚接触编程语言,以下是我自己变得一个小程序,在所有c语言的编译器(vc++0、turbo…

    2024年5月23日
    6400
  • c语言当中的null,C语言当中的符号

    C/C++中,NULL和null的区别是什么? nul 和 null要看编译器,不同的编译器有所区别。 所以C或者C++中都使用一个特殊定义NULL表示无效值,其本质就是未定义具体数据类型的0值。 null是是什么都没有的意思。在java中表示空对象。 本意是“空的;元素只有零的”意思。计算机中通常表示空值,无结果,或是空集合。\x0d\x0a在ASCII码…

    2024年5月23日
    4500
  • 包含c语言对txt文件命名的词条

    如何在C语言编程里面修改源文件名字 如果你是在WINDOWS的话,简单了,随便用个编辑器,比如记事本,然后写c源程序,保存到你想要保存的位置。如果你在DOS下,可以用edit,写好以后,按alt键,选择文件菜单,然后保存。 用open打开文件,注意操作模式使用“修改”或者“添加” 用write或者fprintf向文件中写入你的内容。 用close关闭文件。 …

    2024年5月23日
    4900
  • 学c语言编程,学c语言编程用什么软件

    编程开发必须要学C语言吗? 1、要学习。编程开发的学习内容主要包括c语言、python和c+语言。C语言作为一种简单灵活的高级编程语言,它是一个面向过程的语言,一般是作为计算机专业的基础入门语言课程。 2、C语言。对于刚接触编程的人来说,先学习C语言是非常重要的。C语言可以说是是计算机编程语言的鼻祖,其他的编程语言几乎全是由C语言变化衍生出来的。 3、不需要…

    2024年5月23日
    3500
  • c语言用string定义字符串,c语言中用string类型来处理字符串类型

    C++怎样定义定义字符串 1、第一是字符数组来表示字符串。用下面的语句声明:char a[10];C语言中字符数组与字符串的唯一区别是字符串末尾有一个结束符\0,而字符数组不需要。 2、在C中定义字符串有下列几种形式:字符串常量,char数组,char指针 字符串常量 即:位于一对双括号中的任何字符。双引号里的字符加上编译器自动提供的结束标志\0字符,作为 …

    2024年5月23日
    4300

发表回复

登录后才能评论



关注微信