【发布时间】:2016-03-15 01:00:56
【问题描述】:
如果不是不可能的话,我希望我的 node.js 函数在 c 程序写入文件的同时从文件中读取。 c 编写时 Node.js 函数无法读取,我想删除该锁。我还需要节点功能 在读取“文件结束!”之前不会停止。
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);
});;
}
【问题讨论】:
-
嗯,一个技巧是以追加模式打开文件并在写入一些数据后打开/关闭它。这就是它不会独占锁定文件并让节点从中读取内容的方式。但这不是一个好的和可行的选择。另一个解决方案是创建管道。让 C 写入它并让节点从中读取。同样,解决方案在很大程度上取决于您的要求。
标签: javascript c node.js