2009-09-18 66 views
2

我需要在DOSEMU下的linux下運行一堆舊的DOS FoxPro/Clipper應用程序。 該程序訪問位於網絡服務器上的「數據庫」(可能是Windows或 Linux服務器)Linux與Windows之間的記錄鎖定問題

實際上,程序運行正常,但我不能管理,使記錄鎖定工作 像預想的那樣:我可以在兩個終端(或服務器和任何終端的 實例)中運行程序並鎖定兩個記錄。

現在,我使用微內核Linux作爲終端和Windows XP作爲服務器,accesing通過CIFS共享 文件和最新的DOSEMU(1.4.0),但我想用 服務器的各種組合(Ubuntu的7 9,該死的小型Linux,XP)< - >協議(CIFS,桑巴,smbclient的各種版本)< - >客戶端(如服務器,沒有運氣相同)

我試圖將服務器配置部分沒有機會鎖定工作(在閱讀完整的O'Reilly Samba書籍鎖定章節http://oreilly.com/catalog/samba/chapter/book/ch05_05.html後)和XP(\ HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ LanmanServer \ Parameters \ UseOpportunisticLocking = 0),但問題仍然存在。

任何想法?

TIA, 巴勃羅

+1

我不知道FoxPro或Clipper,但行鎖實際上與文件鎖定有關? – 2009-09-18 21:32:55

+0

一些鎖定信息是http://www.ghservices.com/gregh/clipper/netdlock.htm – Mark 2009-09-18 22:04:19

+0

希望我有你一個答案,但我可以擴展爲同情。我試圖在Wine下運行,並且從來沒有找到答案。 – 2009-09-18 22:32:31

回答

0

第一關:你對這些節目有關於鎖定任何線索?他們是否使用網絡共享上的db文件運行?回到DOS時代,一個網絡共享並不是真正常見的(當它是時,它通常是Netware)。如果數據庫引擎沒有任何想法可以共享底層數據庫文件,那麼無論你使用什麼cifs - 它都沒有鎖定,所以它不起作用。

現在,如果您已經在DOS網絡的網絡上正確運行了這個程序,並且您正嘗試升級到Linux,那麼當前的DOS網絡是什麼?它是CIF,還是更像Netware?數據庫引擎是否有意識到網絡堆棧並做一些有趣的事情?這可能會導致數據庫引擎不知道網絡的新環境中出現問題。

如果您確實需要弄清楚發生了什麼,您可以嘗試使用Wireshark追蹤CIFS流量並嘗試瞭解它如何使用(或不使用)鎖定。儘管這是一個很大的努力,除非你可以生成一些簡單的應用程序來測試,然後這是很多工作。

+1

快船肯定是用來爲多個客戶打一個網絡共享Novell和MS-NET(我用DOS MS網) – Mark 2009-09-18 22:03:46

+2

FoxPro中顯然有大約鎖定,用它給成千上萬的多用戶系統,在那裏線索。但是有一些涉及Dosemu可能會或可能不會運作的問題。請參閱http://74.125.95.132/search?q=cache:g4q-AkJPCnkJ:ftp://www.alaska-software.com/documents/About_Locking.pdf+foxpro+offset+locking&cd=5&hl=zh-CN&ct=clnk&gl=uk – 2009-09-21 08:16:57

1

@Michael:這些程序在任何DOS(Lantastic,WFW)或Windows(95,NT,XP,...)網絡上都能正常工作。

我創建了一個最小的C程序重現行爲:

#include <io.h> 
#include <fcntl.h> 
#include <sys\stat.h> 
#include <process.h> 
#include <share.h> 
#include <stdio.h> 
#include <conio.h> 

int main(void) 
{ 
int handle, status; 
long length; 

handle = sopen("testlock.txt", O_RDONLY,SH_DENYNO,S_IREAD); 

if (!handle) 
{ 
    printf("sopen failed\n"); 
    exit(1); 
} 

length = filelength(handle); 
status = lock(handle,0L,length/2); 

if (status == 0) 
    printf("lock succeeded\n"); 
else 
    printf("lock failed\n"); 

printf ("Press a key...\n"); 
getch(); 

status = unlock(handle,0L,length/2); 

if (status == 0) 
    printf("unlock succeeded\n"); 
else 
    printf("unlock failed\n"); 

close(handle); 
return 0; 
} 

它可以在DOS/Windows的(第一終端可以鎖定,第二屆一個沒有)的罰款,但DOSEMU在linux下無法執行(您可以在網絡共享中同時運行程序的兩個實例,並且都可以獨立於運行順序Linux-Windows/Windows-Linux獲取鎖定。

+0

其他人也有同樣的問題哦http://www.mail-archive.com/[email protected]/msg04683.html – Mark 2009-09-18 22:55:39

0

我可以證實這個問題確實存在,如上所述。一種解決方案是將共享的DBF文件從Windows服務器移到Linux服務器上。這些文件可以通過CIFS(SAMBA)共享到感興趣的Windows聚會和vi NFS(帶有-o同步nolock選項)到感興趣的Linux團體。 它爲我們工作得很好

佈雷特

0

這似乎是a known, ongoing issue

我知道該字節範圍鎖定(又名Windows風格的記錄鎖定)要求最近版本的內核,雖然我不知道,如果它出現在2.4系列與否。

如果DOSEMU無法進行爲你工作,你可能不得不求助於東西多一點「性趣」。也許下KVM virtual machine運行FreeDOS將讓你更接近自己的目標,但你必須做一些手工設置,以獲得網絡支持(即或弄清楚如何使網絡共享顯示爲來賓本地驅動器號)。滾動到KVM compat列表的底部以查看各種類似DOS的安裝的狀態。

如果你有原來的6.22安裝有那麼這實際上可能是您最好的選擇工作。

0

我們在samba共享上運行一個dos epos應用程序,並在samba共享上擁有正確的鎖定設置,我們也可以通過dosmeu運行應用程序。我們使用以下設置在samba共享上設置了一系列鎖定設置。

[data] 
     comment = data Share 
     inherit acls = Yes 
     path = /data/ 
     read only = No 
     oplocks = no 
     locking = Yes 
     strict locking = No 
     create mask = 0774 
     directory mask = 0775 
     browseable = Yes 
     default case = upper