69,369
社区成员
发帖
与我相关
我的任务
分享
//写进程
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
struct abc{
int a;
char b[20];
long c;
char d[128];
};
int main()
{
char *name = "D:\\MyProjects\\a.txt";
int i=0;
struct abc m_var;
DWORD num;
HANDLE h_file;
h_file = CreateFile( name, // 指向文件名的指针
GENERIC_WRITE, // 访问模式(写 / 读)
FILE_SHARE_READ, // 共享模式
NULL, // 指向安全属性的指针
OPEN_ALWAYS, // 如何创建
FILE_ATTRIBUTE_NORMAL, // 文件属性
NULL // 用于复制文件句柄
);
SetFilePointer(h_file,0,0,FILE_END); //定位到文件末
for (i=0; i<100000; i++) { //这个数加大, 在循环运行时 另个进程CreateFile失败...
memset(&m_var, 0, sizeof(m_var));
m_var.a = i;
strcpy(m_var.b, "abcdefghijklmopq");
m_var.c = i*10;
strcpy(m_var.d, "0123456789");
WriteFile(h_file, &m_var, sizeof(m_var), &num, NULL);
}
Sleep(5*1000); //到这sleep时,另一个进程CreateFile还是失败
CloseHandle(h_file); //好像唯独close后 读进程运行 才能成功
return 0;
}
//读进程
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
struct abc{
int a;
char b[20];
long c;
char d[128];
};
int main()
{
char *name = "D:\\MyProjects\\a.txt";
int i=0;
struct abc m_var;
DWORD num;
HANDLE h_file;
h_file = CreateFile(name, // 指向文件名的指针
GENERIC_READ, // 访问模式(写 / 读)
0, // 共享模式
NULL, // 指向安全属性的指针
OPEN_ALWAYS, // 如何创建
FILE_ATTRIBUTE_NORMAL, // 文件属性
NULL // 用于复制文件句柄
);
if (h_file == INVALID_HANDLE_VALUE) {
printf("Create h_file error!\n"); //每次失败都是失败在这
return -1;
}
SetFilePointer(h_file,0,0,FILE_BEGIN);
for (i=0; i<100; i++) {
memset(&m_var, 0, sizeof(m_var));
ReadFile(h_file, &m_var, sizeof(m_var), &num, NULL);
printf("i=%d\nm_var.a:%d\nm_var.b:%s\nm_var.c:%ld\nm_var.d:%s\n\n", i, m_var.a, m_var.b, m_var.c, m_var.d);
}
CloseHandle(h_file);
return 0;
}