操作系统实验

本文详细介绍了如何使用C++通过OpenFileMapping和CreateFileMapping函数创建和映射共享文件,以及如何在进程中读取和写入共享文件的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1 #include <stdio.h>
 2 #include <iostream>
 3 #include <winuser.h>
 4 #include <windows.h>
 5 using namespace std;
 6 
 7 void FileMapping(void)
 8 {          
 9     //打开共享的文件对象。 
10     HANDLE m_hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, L"TestFileMap"); 
11     if (m_hMapFile)  
12     {  
13         //显示共享的文件数据。 
14         LPTSTR lpMapAddr = (LPTSTR)MapViewOfFile(m_hMapFile,FILE_MAP_ALL_ACCESS,  0,0,0); 
15         OutputDebugString(lpMapAddr); 
16     }
17     else
18     { 
19         //创建共享文件。 
20         m_hMapFile = CreateFileMapping((HANDLE)0xFFFFFFFF,NULL, PAGE_READWRITE,0,1024, _T("TestFileMap")); 
21         //拷贝数据到共享文件里。 
22         LPTSTR lpMapAddr = (LPTSTR)MapViewOfFile(m_hMapFile,FILE_MAP_ALL_ACCESS, 0,0,0); 
23         std::wstring strTest(_T("TestFileMap")); 
24         wcscpy(lpMapAddr,strTest.c_str()); 
25 
26         FlushViewOfFile(lpMapAddr,strTest.length()+1); 
27     } 
28 }
29 
30 int main(int argc, char **argv) {
31         //char szCommandLine[] = "C:\\test";
32         STARTUPINFO si = {sizeof(si)};
33         PROCESS_INFORMATION pi;
34         si.dwFlags = STARTF_USESHOWWINDOW;
35         si.wShowWindow = TRUE;
36         bool bRet = CreateProcess(TEXT("C:\\Windows\\system32\\notepad.exe"), NULL, NULL, NULL, FALSE, 0,
37                                               NULL, NULL, &si, &pi);
38         if (bRet) {
39                 CloseHandle(pi.hThread);
40                 CloseHandle(pi.hProcess);
41                 printf("新进程的ID号:%d\n", pi.dwProcessId);
42                 printf("新进程的主线程ID号:%d\n", pi.dwThreadId);
43         }
44 
45 
46         //==============================================
47 
48         //system("pause");
49         return 0;
50 }

 

转载于:https://www.cnblogs.com/Stomach-ache/p/4053483.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值