C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: LockFileExでファイルをロックできない


(過去ログ 171 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■98416 / inTopicNo.1)  LockFileExでファイルをロックできない
  
□投稿者/ ばんじ (5回)-(2021/11/14(Sun) 14:25:01)

分類:[C/C++] 

LockFileExを使ってファイルをロックしようとしたのですがロックできません。
どこが問題なのでしょうか?
よろしくお願いします。

開発環境:visual studio 2019


int main(int argc, char* argv[])
{
BOOL fSuccess = FALSE;

HANDLE hFile = CreateFile(TEXT("datafile.txt"),
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
CREATE_NEW,
0,
NULL);

if (hFile == INVALID_HANDLE_VALUE)
{
printf("CreateFile failed (%d)\n", GetLastError());
return (1);
}

DWORD dwNumBytesWritten = 0;

for (int i = 0; i < NUMWRITES; i++)
{
fSuccess = WriteFile(hFile,
TestData[i],
TESTSTRLEN-1,
&dwNumBytesWritten,
NULL);
if (!fSuccess)
{
printf("WriteFile failed (%d)\n", GetLastError());
return (2);
}
}

FlushFileBuffers(hFile);

OVERLAPPED sOverlapped;
sOverlapped.Offset = TESTSTRLEN * 3;
sOverlapped.OffsetHigh = 0;

fSuccess = LockFileEx(hFile,
LOCKFILE_EXCLUSIVE_LOCK |
LOCKFILE_FAIL_IMMEDIATELY,
0,
TESTSTRLEN,
0,
&sOverlapped);
if (!fSuccess)
{
printf("LockFileEx failed (%d)\n", GetLastError());
return (3);
}
else printf("LockFileEx succeeded\n");

return (0);
}
引用返信 編集キー/
■98417 / inTopicNo.2)  Re[1]: LockFileExでファイルをロックできない
□投稿者/ とっちゃん (745回)-(2021/11/14(Sun) 15:42:19)
No98416 (ばんじ さん) に返信
> LockFileExを使ってファイルをロックしようとしたのですがロックできません。
> どこが問題なのでしょうか?
> よろしくお願いします。


どこかのprintf でfailed が表示されているのだと思います。
それはどこで発生しどんな値が表示されたのでしょうか?

エラーが出る場合、具体的なエラーが何か?を提示しないと、エラーを修正する
糸口がつかめません。

まずはそれを提示してください(前回同様動くコードじゃないからだれも追検証できない)。

引用返信 編集キー/
■98418 / inTopicNo.3)  Re[2]: LockFileExでファイルをロックできない
□投稿者/ ばんじ (6回)-(2021/11/14(Sun) 21:39:12)
No98417 (とっちゃん さん) に返信
> どこかのprintf でfailed が表示されているのだと思います。
> それはどこで発生しどんな値が表示されたのでしょうか?

エラー処理に引っ掛からず、LockFileEx succeededで何もおこらず処理が終わります。

引用返信 編集キー/
■98419 / inTopicNo.4)  Re[3]: LockFileExでファイルをロックできない
□投稿者/ とっちゃん (746回)-(2021/11/14(Sun) 23:49:44)
No98418 (ばんじ さん) に返信
> ■No98417 (とっちゃん さん) に返信
>>どこかのprintf でfailed が表示されているのだと思います。
>>それはどこで発生しどんな値が表示されたのでしょうか?
>
> エラー処理に引っ掛からず、LockFileEx succeededで何もおこらず処理が終わります。
>
それならロックは成功しています。

ただ、提示されたプログラムはロックした後すぐに終了していますよね?
現在のWindows(Windowsに限りませんが多くの32bit以上のOS)は、プログラム終了時に
オープンしていたカーネルハンドルはほぼ全部強制クローズされます。
その段階でロック状態も解除されるため結果としてロックしていないように見えるのかもしれません。

引用返信 編集キー/
■98429 / inTopicNo.5)  Re[4]: LockFileExでファイルをロックできない
□投稿者/ PATIO (16回)-(2021/11/15(Mon) 14:32:09)
No98419 (とっちゃん さん) に返信
> ■No98418 (ばんじ さん) に返信
>>■No98417 (とっちゃん さん) に返信
> >>どこかのprintf でfailed が表示されているのだと思います。
> >>それはどこで発生しどんな値が表示されたのでしょうか?
>>
>>エラー処理に引っ掛からず、LockFileEx succeededで何もおこらず処理が終わります。
>>
> それならロックは成功しています。
>
> ただ、提示されたプログラムはロックした後すぐに終了していますよね?
> 現在のWindows(Windowsに限りませんが多くの32bit以上のOS)は、プログラム終了時に
> オープンしていたカーネルハンドルはほぼ全部強制クローズされます。
> その段階でロック状態も解除されるため結果としてロックしていないように見えるのかもしれません。

実際にLockFileExが利いているかどうかを確かめたいのであれば、
LockFileExが成功した所でキー入力待ち等でプログラムを一時停止状態にしておいて
確認する必要があると思います。
とっちゃんさんが言われているのはそういう意味です。

引用返信 編集キー/
■98430 / inTopicNo.6)  Re[5]: LockFileExでファイルをロックできない
□投稿者/ ばんじ (7回)-(2021/11/15(Mon) 22:14:51)
No98429 (PATIO さん) に返信
> 実際にLockFileExが利いているかどうかを確かめたいのであれば、
> LockFileExが成功した所でキー入力待ち等でプログラムを一時停止状態にしておいて
> 確認する必要があると思います。
> とっちゃんさんが言われているのはそういう意味です。

getchar()を挟んで確認したみたところ、ちゃんとロックされていました。
ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -