⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.cpp

📁 进程通信与进程同步机制实践 有三个进程R、M、P
💻 CPP
字号:
#include<iostream.h>
#include<windows.h>
void main()
{
	unsigned char my_m;
	HANDLE hFileMap = OpenFileMapping(FILE_MAP_WRITE,false, "my_file");
	if(hFileMap == NULL)
    {
      cout<<"文件映射错! "<<endl;
      return ;
	}
	HANDLE sp = CreateSemaphore(NULL,0,10,"my_sp");
	HANDLE sm = CreateSemaphore(NULL,0,10,"my_sm");
	HANDLE metux = CreateSemaphore(NULL,1,1,"my_mutex");
	PVOID pvFile = MapViewOfFile(hFileMap,FILE_MAP_WRITE,0,0,0);
    char* p=(char*)pvFile;
	char arry[32];
	char flag='y';
	while(flag=='y')
	{
       cout<<"处理数据:"<<endl;
	   WaitForSingleObject(sm,INFINITE);
       WaitForSingleObject(metux,INFINITE);
	   my_m=*(p+1);
       strncpy(arry,p + 3 + my_m * 32, 32);
	   if(arry[0]>='a'&&arry[0]<='z')
           arry[0]=arry[0]+'A'-'a';
	   for(int i=1;arry[i]!='\0';i++)
	   {
		   if(arry[i]>='A'&&arry[i]<='Z')
                arry[i]=arry[i]+'a'-'A';
		   if(arry[i]==' ')
		       if(arry[i+1]==' ')
			   {
				   for(int j=i;arry[j]!='\0';j++)
					   arry[j]=arry[j+1];
		           i--;
			   }
	   }
	   for(i=1;arry[i]!='\0';i++)
	   {
		   if((arry[i]>'z'||arry[i]<'0'||(arry[i]<'@'&&arry[i]>'9')||(arry[i]>'Z'&&arry[i]<'a'))&&arry[i]!=','&&arry[i]!=' ')
			   arry[i]='.';
	   }
       for(i=1;arry[i]!='\0';i++)
	   {
		   if(arry[i-1]=='.')
                if(arry[i]>='a'&&arry[i]<='z')
                    arry[i]=arry[i]+'A'-'a';
	   }
	   strncpy(p + 3 + my_m * 32,arry, 32);
       my_m=(my_m+1)%10;
	   *(p+1)=my_m;
       ReleaseSemaphore(metux, 1, NULL);
       ReleaseSemaphore(sp, 1, NULL);
	   cout<<"是否继续y/n:"<<endl;
	   cin>>flag;
	}
	UnmapViewOfFile(pvFile);
    CloseHandle(hFileMap);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -