方法2:用读写模式打开,使文件指针移亏段咐动到文件末尾,然后写入数据
方法3:用读模式打开文件,用写和建立模式打开新文件,读取原文件内容,写入新文件,再将新文件中追燃裂加写入新的数据,将原文件改名为备份文件名,将新文件改名为原销纯文件名
下面的程序,编译之后,你厅键可以运行很多个实例,目前我将文件写在了D:\1.txt,每个程序写1000行数据,这些值你可以自己更改(比如 写在C:,每个程序写10000行等),等程序都写完后,你可以去文件中查看写文件的结果。补充一下,我是在VC6.0环境中写的,所以windows.h,如果你不是在这个环境中的话,可能需要修改一些定义,比如DWORD等。其他的API都是windows平台提供的API;#include <stdio.h>
#include "windows.h"
int main()
{
//获取进程ID,因为你希望是多个贺伏禅进程运行同时写一个文件,所以,我们打印出进程ID
DWORD dwProcessID = GetCurrentProcessId()
//初始化我们要写入文件中的内容,及该内容长度;
char szContent[100] = {0}
sprintf(szContent,"process[%u] write file\r\n",dwProcessID)
DWORD dwContentLen = strlen(szContent)
//创建互斥量,这样可以进行进程间的互斥,当然用这个也可以做线程间的禅尘互斥
HANDLE hMutex = CreateMutex(NULL,FALSE,"MyFileMutex")
if (NULL == hMutex)
{
printf("[%u]Create/Open Mutex error!\r\n",dwProcessID)
return 1
}
//创建或打开文件
HANDLE hFile = CreateFile("D:\\1.txt",
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_WRITE | FILE_SHARE_READ,NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_ARCHIVE,
NULL)
if (INVALID_HANDLE_VALUE == hFile)
{
printf("[%u]Creat/Open file error!\r\n",dwProcessID)
return 1
}
//循环写入文件
for(int i = 0i <1000 i++)
{
//等待临界资源,即锁定文件
WaitForSingleObject(hMutex,INFINITE)
printf("Process[%u] Get the signal\r\n",dwProcessID)
DWORD len = 0
//因为是共享写文件,即多个程序写一个文件,所以一定要将文件指针偏移到尾部
SetFilePointer(hFile,0,NULL,FILE_END)
//写入文件
BOOL rnt = WriteFile(hFile,szContent,dwContentLen,&len,NULL)
if (rnt == FALSE)
{
printf("Process[%u] Fail to write file\r\n",dwProcessID)
}
//释放互斥量,解除锁定
ReleaseMutex(hMutex)
//加个Sleep便于我们中间观察结果
Sleep(30)
}
CloseHandle(hMutex)
CloseHandle(hFile)
return 0
}
应你要求,我把AIP中的宏定义解释如下:
HANDLE hFile = CreateFile("D:\\1.txt",
GENERIC_READ | GENERIC_WRITE,//表示程序对该文件有读和写的权限
FILE_SHARE_WRITE | FILE_SHARE_READ,//表示可以多个程序共享读和写的权限
NULL,
OPEN_ALWAYS,//表示打开该文件,如果该文件不存在,则创建该文件
FILE_ATTRIBUTE_ARCHIVE,//文件的属性为存档
NULL)
WaitForSingleObject(hMutex,INFINITE)
//INFINITE表示永远等待,直到hMutex有信号为止
SetFilePointer(hFile,0,NULL,FILE_END)
//FILE_END表示从文件尾部开始偏移;实际此举就是将文件指针偏移到文件尾部;
改这行,最后的wb改成 a+,这判段碧样就是追加 *** 作并掘举把指燃慧针放文件尾$fp = fopen($this->filename,"wb")
$fp = fopen($this->filename,"a+")
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)