我正在尝试使用tail -f
构建一个使用#include <stdio.h>
#include <stdlib.h>
int main (){
printf("Tailing file");
system("tail -f read.txt", function(){
// this callback is called everytime new data is outputted from tail
doSomething();
});
exit(0);
}
来填充文件的C程序,但我希望它可以随时将某些内容写入文件。
我是一名javascript程序员,所以下一个例子可能在C语言的上下文中没有多大意义,但我想做的是:
{{1}}
我正在尝试做什么?谢谢你的帮助
答案 0 :(得分:1)
答案 1 :(得分:0)
这在C中有点复杂。您需要创建另一个运行“tail -f”命令的进程,并处理此进程的stdout,然后重定向到正在运行main的进程。
幸运的是,如果你只想在一个方向上进行通信(即tail -f的进程输出),popen()函数就派上用场了。
看一下使用popen的这个Stackoverflow问题:how to control popen stdin, stdout, stderr redirection?
打开管道后,您必须使用fread或其他类似功能检索所需的输出。
答案 2 :(得分:0)
如果您需要使用tail -f
,并且您不想自己拖尾文件,则需要打开一个管道。
正如其他人所说,popen
是一种很好的方法:它就像fopen
,除了它需要一个shell命令字符串,通过shell执行它,并返回一个FILE
您可以使用fread
阅读。管道中的读取将阻塞,直到数据可用。您可能需要大致类似的内容:
#define BUFSZ 1024
FILE *pipe = popen("tail -f yourfile", "r");
while (you still want to tail the file) {
char buf[BUFSZ];
fread(buf, BUFSZ, 1, pipe);
/* do something with the data in buf */
}
如果您在等待尾部输出时需要执行其他操作,则需要使用pipe
,这是popen
在幕后使用的(较低级别)系统调用