- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我愿意:
我知道如何使用 dup2 和 freopen 来:
...但是我不确定第 2 项?
原因:我想对发送到 stdout/err(来自第 3 方代码)的数据进行后处理,然后将其发送到网络服务器 - 同时让应用程序正常运行。
为什么? ... 因为现在当我们的应用程序运行时,我们看到关键数据从第 3 方代码转到标准输出(和错误),这是一个 PITA 让用户尝试和弄乱本地日志文件。我宁愿将“最后 N 个字节”捕获到环形缓冲区中,对其进行后处理,然后 - 如果用户报告存在问题 - 将其发送到服务器。
为什么要避免使用文件? ...因为这是针对必须在 iOS 和桌面上运行的代码,并且“不断写入文件”是我想避免的事情,因为我不想将它作为文件。另外……我不得不担心维护该文件、主动调整其大小等问题。
最佳答案
Stdout 是一个基本的文件句柄,这意味着它是一个指针。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv);
int main (argc,argv)
int argc;
char **argv;
{
stdout = &(*stderr);
fprintf(stdout, "test");
return 0;
}
通过声明 stdout 指向不同的文件句柄,该程序重定向 stdout。要对其进行测试,请将其编译为 test
,然后在命令行中键入 ./test > t
和 ./test 2> t
。
重定向的 stdout 管道仍将输出单词 test,而重定向的 stderr 管道则不会。
由于文件是流,请阅读此 section of the GNU C Library了解如何创建内存流。此示例创建一个文本缓冲区以动态调整大小以保存输入,并重定向标准输出以指向它。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv);
int main (argc,argv)
int argc;
char **argv;
{
char *bp;
size_t size;
FILE *stream;
stream = open_memstream (&bp, &size);
stdout = &(*stream);
fprintf(stdout, "test");
fflush(stdout);
fprintf(stderr, "buf = %s, size = %d\n", bp, size);
fclose (stream);
free(bp);
return 0;
}
请注意手册中有关在输入和输出之间切换时刷新缓冲区的部分。
关于c - 将文件写入内存缓冲区(fopen something,但写入缓冲区,而不是磁盘),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9591196/
我想在我的 cpp 函数中调用 fopen,但是,Rcpp 总是提示“没有匹配的函数来调用‘fopen’”。所以完全复制了 https://github.com/hadley/xml2/blob/93
我想在我的 cpp 函数中调用 fopen,但是,Rcpp 总是提示“没有匹配的函数来调用‘fopen’”。所以完全复制了 https://github.com/hadley/xml2/blob/93
我正在使用本教程 http://papermashup.com/caching-dynamic-php-pages-easily/用于缓存页面 /* Heres where you put your
我在 Wordpress 上工作,我对 PHP 几乎一无所知。我正在尝试让带有帖子摘录的滚动条正常工作,但它使用了 fopen() 但它在我客户的主机上已关闭。 $f = fopen( $url, '
我有一个基本程序,旨在复制 bash 的 cp 命令的功能。我正在为 UNIX 和 Windows 开发一个副本。我的 UNIX 版本运行良好,但是,我发现 Windows 不支持 fopen() 的
在我的网站上,用户填写表格进行注册,然后该信息会添加到数据库中。我也试图将信息写入 CSV 文件。到目前为止我的代码给了我这个错误: 警告:fopen() [function.fopen]:第 122
我正在尝试学习 C。函数 Foo 的目标是接受一个字符串,更改其中的一些字符,然后查看是否存在具有该名称的文件。如果存在这样的文件,则在 STDOUT 上打印它的内容。 听起来很简单而且应该很简单,但
我目前有一些未压缩的代码读取文件,它使用以下方法在C++中读取文件 FILE* id = fopen("myfile.dat", "r"); 获得id后,代码的不同部分使用fread、fseek等访问
My last question作为背景。我试图环绕“fopen()”,但 gcc 给了我这个错误,而“remove()”没有问题。 错误:“fopen”的类型冲突fopen(const char *
好的,所以我正在学习 Docker,并且我正在尝试部署一个带有指向我的服务器的子域(其域是从另一个提供商处购买的)的测试应用程序。服务器已经具有非 dockerized Nginx 设置,可以完美地服
我需要在我的系统 verilog 代码中打开一个文件,我需要知道它对我的相对路径才能使用 $fopen。所以首先,我需要知道我的立场。有没有办法知道我当前的目录路径? (通过使用 $display 或
我的网站被一个脚本小子攻击得非常成功。在自动的基础上,一个隐藏的脚本在我的服务器上被访问,导致我所有的 index.php 文件被修改,并在它们的顶部添加一个 iframe(base 64 编码)。
我尝试通过fopen("serial port path", "+w")打开串口 并通过fileno()获取文件描述符。 之后,我调用了 tcsetattr() 但它生成了一个错误,显示 Inappr
在下面的声明中: $handle = fopen('./readme.txt'); $handle 是什么变量?是 bool 值还是什么? 在运行这两个不同的语句后我有疑问: if($handle)
我是一名 PHP 学习者,我正在处理文件,但我无法在自己的服务器中打开文件,因为出现“权限被拒绝”错误。我正在使用 fopen()功能:fopen('file.txt', 'r+'); 我在 Cent
我需要打开一个文件,替换一些内容(12345 为 77348)并保存。据我所知 $cookie_file_path=$path."/cookies/shipping-cookie".$unique;
我有一个巨大的二进制文件,有 2148181087 字节 (> 2gb) 我正在尝试执行 fopen (file, "r") 但失败了 Can not open: xyz file (Value to
我的桌面上有一个名为 fun 的文本文件,但是当我通过时: FILE* fp; if((fp = fopen("/Users//Desktop/fun", "r")) == NULL) { p
我有一个名为 denem.txt 的文件并且有内容 123456789 123456789 123456789 当我们以“a+b”模式打开文件时,PHP 应该将指针指向文件末尾,这意味着当我尝试使用
我想知道是否有人可以通过 Matlab fopen 命令阐明以下问题: >> [stat myjob] = unix('echo $PBS_NODEFILE'); % gets PBS file na
我是一名优秀的程序员,十分优秀!