相关疑难解决方法(0)

如何在freopen("out.txt","a",stdout)之后将输出重定向回屏幕

#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系统调用?

c posix stdout

29
推荐指数
5
解决办法
4万
查看次数

C - 如何抑制子函数的输出?

我想打电话给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 terminal suppress output

13
推荐指数
1
解决办法
4489
查看次数

C++ 通过 HTTP 发送图像

我尝试使用 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)

c++ file-io http

5
推荐指数
1
解决办法
1万
查看次数

如何从 Rust 的进程内部重定向 stderr?

我正在尝试重定向 Stderr从进程内部文件描述符,但似乎没有它的实现,而且我没有看到与dup2C/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直接使用——虽然我厌倦了它。

pipe stderr rust

5
推荐指数
1
解决办法
2490
查看次数

标签 统计

c ×2

c++ ×1

file-io ×1

http ×1

output ×1

pipe ×1

posix ×1

rust ×1

stderr ×1

stdout ×1

suppress ×1

terminal ×1