C语言 写入日志允许其它程序同时读取
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#define LOG_FILE "logfile.txt"
// 写日志的函数
void write_log(const char *message) {
// 以附加模式打开文件,允许共享读取
HANDLE hFile = CreateFile(
LOG_FILE,
GENERIC_WRITE, // 写入权限
FILE_SHARE_READ, // 允许其他程序读取
NULL, // 默认安全属性
OPEN_ALWAYS, // 如果文件不存在则创建
FILE_ATTRIBUTE_NORMAL, // 一般文件属性
NULL // 没有模板文件句柄
);
if (hFile == INVALID_HANDLE_VALUE) {
fprintf(stderr, "Failed to open log file. Error: %lu\n", GetLastError());
return;
}
// 定位到文件末尾
SetFilePointer(hFile, 0, NULL, FILE_END);
// 写入日志信息
DWORD bytesWritten;
WriteFile(hFile, message, strlen(message), &bytesWritten, NULL);
WriteFile(hFile, "\n", 1, &bytesWritten, NULL);
// 关闭文件句柄
CloseHandle(hFile);
}
int main() {
const char *logMessage = "This is a log message.";
// 写入日志
write_log(logMessage);
printf("Log message written to %s\n", LOG_FILE);
return 0;
}
说明:
-
CreateFile 函数:用于打开或创建文件。使用
FILE_SHARE_READ
标志来允许其他应用程序在文件打开时读取该文件。 -
写入日志:首先定位到文件末尾,然后写入日志消息和换行符。
-
错误处理:代码中包含基础的错误处理,以确保文件成功打开和写入。
使用:
- 将代码保存为
.c
文件,例如logger.c
。 - 在 Windows 下编译代码,可以使用
gcc
或其他支持的编译器:gcc logger.c -o logger
- 运行生成的可执行文件:
./logger
- 你可以在执行后查看
logfile.txt
文件。
发表评论