2010-11-24 3 views
0

시간이 지남에 따라 파일이 증가하고 경쟁 조건이 없거나 Windows의 C++에서 다른 프로세스의 파일을 읽어야합니다.프로세스가 C++로 쓰는 동안 프로세스에서 파일 읽기

파일 쓰기가 가능하며 재생할 수있는 공간이 없습니다. 내가 할 수있는 일은 우아하게 그것을 읽는 것이다.

이 사례를 잘 처리 할 생각이 있습니까?

TIA 당신은 모든 작가가 최소한 읽기 액세스를 공유하여 파일을 열고, 모든 독자가 적어도 쓰기 액세스를 공유하여 파일을 열고 있는지 확인해야 할 것이다는 Win32에서

+0

C 또는 C++? 귀하의 주제는 C, 당신의 키워드는 C++라고 말하며, 당신의 몸은 "... C++의 과정 ..."을 언급합니다. 전혀 이해가되지 않습니다. –

답변

0

. 독자가 1 명 이상이거나 작가가 1 명 이상인 경우 더 공유해야합니다.

CreateFile docs, dwShareMode 매개 변수는 여기를 참조하십시오.

0

파일 공유를 허용하려면 거의 확실하게 CreateFile (두 프로세스 모두)을 사용해야합니다. 쓰기 응용 프로그램이 독점 공유 모드에서 파일을 열고 열어두면 읽기 응용 프로그램에서 파일을 열 수 없습니다.

는 거기에서, 경쟁 조건을 방지하는 것은 입니다 매우 간단합니다 : 각 프로세스는 일반적으로이 파일의 해당 섹션에 데이터를 사용하면서 독점적 인 액세스를 위해 파일의 일부를 잠 LockFile 또는 LockFileEx을 사용합니다. 일반적으로, 그 기간을 가능한 한 짧게하고 싶기 때문에 가능한 빨리 섹션을 잠그고 읽고 쓰고 잠금을 해제합니다 (즉, 다른 것을하지 않고 피할 수 있다면).

+0

파일을 만들고 추가하는 작업이 앱에서 완료 되었기 때문에 쓰기 프로세스에서 CreateFile을 사용할 수 없습니다. 레이싱 상태가 없을 때 읽기 프로세스에서만 CreateFile과 LockFile (Ex)을 사용할 수 있습니까? –

+0

@ user518978 : 아마도 쓰기 응용 프로그램 작성 방법에 따라 다를 수 있습니다. 시도 된 결과에서 결과를 확인하고 그에 따라 반응하면 작동 할 수 있습니다. "맹목적으로"글을 쓰면 작동이 시작될 것이라고 예상하고 실패를 보게 될 것입니다 (쓰기가 실패하고 다시 시도하지 않아 데이터가 손실됩니다). –

관련 문제