0

我在将 CGI 与网页同步时遇到问题。我有一个用 C 语言编写的 CGI,负责创建 XML 文件并不断更新它。我的网页读取该 XML 并在页面上显示内容。并且两者(CGI 和网页)都在持续运行。有时,当我的 CGI 将数据写入 xml 文件时,网页会尝试同时读取它,而我用 java 脚本编写的函数无法读取数据。有没有办法同步这个。(就像在linux中我们使用互斥锁一样)类似的东西。

我用来读取 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;

我创建 XML 的 CGi 的一部分

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 Script)中调试其给出错误时:

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

1 回答 1

0

使用文件锁定 ( flock) 来标记文件何时正在使用,这样您就可以阻止读取它,直到它被更新。您可能必须通过另一个 CGI 应用程序来阅读它,这样您才能尊重锁。

更好的是 - 首先不要将数据存储在 XML 文件中。使用 RDBMS 并动态生成 XML。

于 2013-07-17T08:54:47.543 回答