2016-03-15 65 views
0

我想讓我的node.js函數從文件中讀取,而同時在它的c程序寫入,如果這不是不可能的。 Node.js函數在c寫入時無法讀取,我想刪除該鎖。另外我需要節點功能 不會停止,直到閱讀'文件結束!'。node.js讀取txt文件,同時寫入c

C程序:

#include <stdio.h> 
#include <time.h> 
#include <unistd.h> 

int main(int argc,char *argv[]) { 

    int simulationLength,simulationStep,simulationStepNum,i,time; 
    FILE *f; 

    if(argc != 3) { 
     printf("Bad input!\n"); 
     return 1; 
    } 



    simulationLength = atoi(argv[1]); 
    simulationStep = atoi(argv[2]); 

    simulationStepNum = simulationLength/simulationStep; 
    f=fopen("exit.dat","w"); 

    for(i=0;i<simulationStepNum;i++) { 
     time = rand()%10; 
     fprintf(f,"TStep %d, Time=%d\n",i,time); 
     sleep(time); 
     if(i%10 == 0) 
      fprintf(f,"Internal error!\n"); 
    } 
    fprintf(f,"End of file!\n"); 
    fclose(f); 
} 

Node.js的功能:

var readline = require('readline'); 
var fs = require('fs'); 

module.exports = function() { 
    var file = 'app/webmus/app/wemus-cluster-simulation/exit.dat'; 
    var eof = 'End of file!'; 

    var lineReader = readline.createInterface({ 
     input: fs.createReadStream(file) 
    }); 

    lineReader.on('line', function(line) { 
     if (line == eof) lineReader.close(); 
     console.log(line); 
    }).on('close',function(){ 
     process.exit(0); 
    });; 
} 
+0

嗯,一個竅門是在追加模式下打開文件並在寫入一些數據後打開/關閉它。這就是它不會專門鎖定文件並讓節點讀出某些內容的方式。但這不是一個好的和可行的選擇。另一個解決方案是創建管道讓C寫入它並從中讀取節點。同樣,解決方案很大程度上取決於您的要求。 – Saleem

回答

0

您也可以更改推沖洗內容到文件:

for(i=0;i<simulationStepNum;i++) { 
    time = rand()%10; 
    fprintf(f,"TStep %d, Time=%d\n",i,time); 

    // flush data from buffers to disk. 
    fflush(f); 

    sleep(time); 
    if(i%10 == 0) 
     fprintf(f,"Internal error!\n"); 
} 

我敢肯定,這應該解決你的問題。同樣,如果你在* nix環境中,命名管道最適合這種工作。

+0

就是這樣,謝謝! –