suj*_*jin 2 c c++ linux windows visual-c++
可以使用 C++ 在 Windows 中使用LockFileEx API 锁定特定偏移量,我尝试了这一点,并获得了成功的结果。
但我尝试使用LockFileEx锁定整个文件,但失败了。我在网站上没有找到任何如何使用 LockfileEX 进行完整文件锁定的文档。
ifile = CreateFile(argv[1], GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_ALWAYS, 0, NULL);
if (ifile == INVALID_HANDLE_VALUE) {
printf("CreateFile failed (%d)\n", GetLastError());
return 1;
}
OVERLAPPED overlapvar;
overlapvar.Offset = 0;
overlapvar.OffsetHigh = 0;
success = LockFileEx(ifile, LOCKFILE_EXCLUSIVE_LOCK | LOCKFILE_FAIL_IMMEDIATELY, 0, 0, 0, &overlapvar);
Run Code Online (Sandbox Code Playgroud)
我在 Windows 中尝试使用上面的代码,但它没有锁定整个文件。在我的Windows代码中,我给出了overlapvar.Offset = 0文件的开头并5th argument of LockFileEx to 0锁定直到文件的结尾。
我在Linux中使用fcntl尝试了相同的方法,如下所示。
struct flock param ;
param.l_type = F_RDLCK ;
param.l_whence = 0 ;
param.l_start = 0 ; //start of the file
param.l_len = 0 ; // 0 means end of the file
fcntl(FileFd, F_SETLKW, ¶m)
Run Code Online (Sandbox Code Playgroud)
基于这两个变量param.l_start,param.l_len我们用来决定使用哪个偏移量来获取锁定。通过将这两个变量设置为0可以帮助我们在Linux中从文件开始到结束进行锁定。
我期望使用LockFileEx或任何其他 API在 Windows 中出现相同的行为。
是否可以使用 LockFileEx 在 Windows 中执行完整文件锁定?
是否有其他 API 可用于执行完整文件锁定?
还有其他方法可以在 Windows 中执行相同的操作吗?
谢谢。
看来您无条件地希望在打开文件后立即锁定文件的全部内容。如果是这种情况,那么您应该简单地将0(不共享)作为第三个参数传递给而CreateFile不是使用LockFileEx.
LockFileEx特别是关于用法,您将锁定从偏移量 0(通过OVERLAPPED参数)开始且长度为 0(通过前面的两个参数)的区域。您无法使用零指定“直到文件结尾”的区域长度。如果您想锁定跨越整个文件的区域,您只需将两者指定为MAXDWORD.
| 归档时间: |
|
| 查看次数: |
6649 次 |
| 最近记录: |