2013-07-17 29 views
0

我在將CGI與網頁同步時遇到問題。我有一個用C語言編寫的CGI,負責創建XML文件並不斷更新它。我的網頁讀取該XML並在頁面上顯示內容。兩者(CGI和網頁)都在不斷運行。有時候,當我的CGI將數據寫入xml文件時,網頁會嘗試同時讀取它,並且用java腳本編寫的函數無法讀取數據。有什麼辦法來同步這個嗎? (就像在Linux中我們使用互斥體)類似的東西。無法同步Java腳本和CGI

我的一些代碼卡里面我是用讀取XML文件:

<xml ID="noteXML" 
SRC="note.xml"></xml> 

if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 


    xmlhttp.open("GET","note.xml?"+ Math.random(),false); 
    xmlhttp.send(); 
    xmlDoc=xmlhttp.responseXML; 

    document.getElementById("to").innerHTML= 
    xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue; 

部分我的CGI創建XML

void CreateXMLFile() 
{ 
    char buffer[300]; 

    sprintf(buffer,"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?> \n <note> \n <to>%d</to> \n <status>%s</status> <upgraded>%d</upgraded> <remaining>%d</remaining> \n </note>",100,"Welcom to XML",10,15); 

    FILE *xml = fopen("/var/www/html/note.xml","w"); 

    if(xml) 
    { 
    fprintf (xml,"%s",buffer); 
    fclose(xml); 
    } 

當下面一行調試它給錯誤(Java腳本):

 "document.getElementById("to").innerHTML= xmlDoc.getElementsByTagName("to") [0].childNodes[0].nodeValue;" 

回答

0

使用文件鎖定(flock)來標記當一個文件正在使用中,所以你阻止從它讀取,直到它被更新。您可能需要通過另一個CGI應用程序讀取它,以便您可以尊重鎖定。

更好的是 - 不要將數據存儲在XML文件中。使用RDBMS並即時生成XML。

+0

在開始寫入文件之前鎖定文件。當你完成寫作時解鎖它。在讀取之前檢查是否存在鎖定,如果存在,則等待鎖定消失後再繼續。 – Quentin

+0

感謝您的回覆....將嘗試.... –