يمكن إنشاء ملف واحد () فتح ملف واحد في نفس الوقت في موضوعين مختلفين

StackOverflow https://stackoverflow.com/questions/1576187

  •  21-09-2019
  •  | 
  •  

سؤال

يمكن إنشاء ملف واحد () فتح ملف واحد في نفس الوقت في موضوعين مختلفين


void new_function(void * what) {

HANDLE h = CreateFile("c:\\tmp", GENERIC_ALL,FILE_SHARE_WRITE | 
                  FILE_SHARE_READ , NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

if (h == INVALID_HANDLE_VALUE)
{
    DWORD d = GetLastError();
    return ;
}
Sleep(10000);

}

int main() {

HANDLE h = CreateFile("c:\\tmp", GENERIC_ALL,FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

Sleep(10000);
return 1;

}


في كل مرة يخرج في GetLastError موقع. والخطأ ERROR_SHARING_VIOLATION (32 ، "لا يمكن للعملية الوصول إلى الملف لأنه يتم استخدامه بواسطة عملية أخرى.")

إذا شاركت في فتح الملف ، فما هو استخدام FILE_SHARE_WRITE | FILE_SHARE_READ

شكرا

The program environment is Win32 Vs2003

هل كانت مفيدة؟

المحلول

مقبض الملف هو دائماً مشترك بين المواضيع. كل ما ستحتاج إلى القيام به هو مجرد استخدام المقبض كالمعتاد ، ولكن على خيوطين.

مكالمتك الثانية إلى CreateFile() تفشل لأنك تطلب المزيد من الوصول ، GENERIC_ALL, ، مما تسمح بالوصول المشترك ، FILE_SHARE_WRITE | FILE_SHARE_READ.

إذا طلبت بدلاً من ذلك فقط GENERIC_READ | GENERIC_WRITE, ، سوف ينجح.

ال CreateFile() سيكون السلوك هو نفسه إذا اتصلت به على موضوع واحد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top