Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C过滤器文件输入流_C_Stream_Stdin - Fatal编程技术网

C过滤器文件输入流

C过滤器文件输入流,c,stream,stdin,C,Stream,Stdin,我正在使用C语言中的第三方库,它将文件*作为数据源,并对文本进行一些处理 现在,我只需传递stdin或fopen一个文件并传递它 但是,我想在库看到文本之前进行一些过滤。(特别是,我想在每个新行字符\n或\r之前插入分号;) 在纯C(而不是C++)中,如果不立即将整个文件复制到内存中(即作为某种管道),那么最好的方法是什么 这就是我对图书馆的称呼 mpc_result_t r; FILE *f = NULL; if (argc > 1) { f = fopen(argv[1], "

我正在使用C语言中的第三方库,它将
文件*
作为数据源,并对文本进行一些处理

现在,我只需传递
stdin
fopen
一个文件并传递它

但是,我想在库看到文本之前进行一些过滤。(特别是,我想在每个新行字符
\n
\r
之前插入分号

在纯C(而不是C++)中,如果不立即将整个文件复制到内存中(即作为某种管道),那么最好的方法是什么

这就是我对图书馆的称呼

mpc_result_t r;
FILE *f = NULL;
if (argc > 1) {
    f = fopen(argv[1], "rb");
} else {
    f = stdin;
}
if (!f) return;

if (mpc_parse_pipe("test", f, test, &r)) {
    mpc_ast_print(r.output);
    mpc_ast_delete(r.output);
} else {
    mpc_err_print(r.error);
    mpc_err_delete(r.error);
}
fclose(f);

我们必须看到一些调用库的代码示例。您可以在文件中读取while输入,然后将该文件传递到库中。您能否更具体地说明纯C的含义?C没有管道的概念。相反,您可以将转换后的输入写入临时文件,然后将该临时文件作为输入提供给库。(好的,@2501说了什么…)否则,您可以使用POSIX或其他特定于系统的构造来允许一个单独的进程在库同时读取转换后的输出时执行转换。我同意@jxh:我不认为您可以使用C11标准中定义的“纯C”来完成转换,而不使用单独的传递数据-有效地读取原始数据输入并写入文件,然后将该文件传递给库函数。如果您可以使用POSIX,那么您就可以选择—您的映射代码可以在一个单独的进程中使用管道运行,例如,也可以在一个单独的线程中运行。确保您知道如何处理CRLF行结尾。从表面上看,你会在CR前面加一个分号,在LF前面加一个分号,但这可能不是最好的选择。我们必须看到一些调用库的代码示例。你可以在文件中读取while输入,然后将该文件传递到库中。你能更具体地说明纯C是什么意思吗?C没有管道的概念。相反,您可以将转换后的输入写入临时文件,然后将该临时文件作为输入提供给库。(好的,@2501说了什么…)否则,您可以使用POSIX或其他特定于系统的构造来允许一个单独的进程在库同时读取转换后的输出时执行转换。我同意@jxh:我不认为您可以使用C11标准中定义的“纯C”来完成转换,而不使用单独的传递数据-有效地读取原始数据输入并写入文件,然后将该文件传递给库函数。如果您可以使用POSIX,那么您就可以选择—您的映射代码可以在一个单独的进程中使用管道运行,例如,也可以在一个单独的线程中运行。确保您知道如何处理CRLF行结尾。从表面上看,在CR前面加一个分号,在LF前面加一个分号,但这可能不是最好的选择。