#include <stdio.h>
int main() {
printf("This goes to screen\n");
freopen("out.txt", "a", stdout);
printf("This goes to out.txt");
freopen("/dev/stdout", "a", stdout);
printf("This should go to screen too, but doesn't\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我调用freopen将stdout重定向到out.txt然后我在文件上打印一些东西,现在我想将它重定向回屏幕,但是freopen("/ dev/stdout","a",stdout); 不起作用.有没有办法使用ANSI C或POSIX系统调用?
我想打电话给bar()
在foo()
,bar()
会改变一些全局变量的值(这是我想要的),但同时产生一些输出(我不"想要的任何输出);
void foo()
{
//I have tried:
//system("1>&/dev/null") and of course this won't work
bar();
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能抑制bar()
输出?
我尝试使用 C++ 实现一个简单的 HTTP 服务器。我能够向浏览器发送文本响应,但无法发送二进制文件请求的响应。
这是我的代码,用于获取 PNG 文件请求的 HTML 响应:
string create_html_output_for_binary(const string &full_path)
{
const char* file_name = full_path.c_str();
FILE* file_stream = fopen(file_name, "rb");
string file_str;
size_t file_size;
if(file_stream != nullptr)
{
fseek(file_stream, 0, SEEK_END);
long file_length = ftell(file_stream);
rewind(file_stream);
// Allocate memory. Info: http://www.cplusplus.com/reference/cstdio/fread/?kw=fread
char* buffer = (char*) malloc(sizeof(char) * file_length);
if(buffer != nullptr)
{
file_size = fread(buffer, 1, file_length, file_stream);
stringstream out;
for(int i = 0; i < file_size; i++)
{
out << buffer[i];
}
string copy …
Run Code Online (Sandbox Code Playgroud) 我正在尝试重定向 Stderr
从进程内部文件描述符,但似乎没有它的实现,而且我没有看到与dup2
C/C++类似的任何内容的明确路线。
我试过了:
Read
( impl Read for Stderr
),但需要覆盖整个代码库。消费文件描述符中的数据,然后进入File
,然后进入ReadBuf
trait FDReader {
fn consume(&mut self);
}
impl FDReader for Stderr {
fn consume(&mut self) {
let f = std::fs::File::from_raw_fd(self.as_raw_fd());
let mut extract = String::new();
BufReader::new(f).read_to_string(&mut extract);
}
}
Run Code Online (Sandbox Code Playgroud)
我consume
之所以专注是因为我在测试代码时不必完全返回任何内容,尽管这不起作用。
由于我在 Linux 系统上运行,并且我不打算发布代码,因此我还考虑了重定向/proc/self/fd/2 -> /dev/null
,然后在我想写入时返回原始指针引用。对于这个范围来说,这是最重要的。
我也想过libc::dup2
直接使用——虽然我厌倦了它。