c# - 如何在 Linux 上的 .NET 6 中写入文件描述符 3 而不是 stdout?

标签 c# linux .net-core

我在 Ubuntu 22.04 上使用 .NET 6。以下 Bash 代码的等效 C# 代码是什么?

echo 'Hello, World!' >&3

通常,在 C# 中,我会使用类似 Console.WriteLine("Hello, World!"); 的代码写入标准输出。但在这里,我需要写入文件描述符 3 而不是 stdout。

我能够找到一些 Stack Overflow 答案,但它们相当陈旧,并且涉及 Windows API,我认为这不适用于我正在尝试做的事情。

我还应该澄清,对于我的用例,在启动 .NET 进程时将突出输出重定向到另一个文件描述符不是一个选项。这是因为我需要能够出于一个目的写入 stdout,出于另一个目的而写入 stderr,出于另一个目的而写入文件描述符 3。总共三个目的。这是因为该进程必须能够由处理 stdout、stderr 和文件描述符 3 这些方式的框架启动。它需要兼容。

最佳答案

您应该能够通过写入 /proc/self/fd/3 来实现此目的

使用 StreamWriter:

using (StreamWriter outputFile = new StreamWriter("/proc/self/fd/3"))
{
    outputFile.WriteLine("Test");
}

否则,您可以使用上面引用的命令进行系统调用来 echo,或者这样...

Process.Start(@"echo Test > /proc/self/fd/3");

关于c# - 如何在 Linux 上的 .NET 6 中写入文件描述符 3 而不是 stdout?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74340745/

相关文章:

c# - 在表单之间传递值时出错

c# - 在下拉列表中设置选定值

linux - LTTng能否通过跟踪Linux内核来分析多线程问题?

asp.net-core - 与部署在 IIS 中的多个子域站点共享同一 session (aspnet core)

c# - Azure 队列 : Unable to read cloud queue messages. AsString 和 AsBytes 属性抛出 System.ArgumentException

c# - 在 ASP.NET 中捕获由通用处理程序 (ashx) 文件引起的异常

C# - 如何为 T 和 T[] 应用不同的泛型方法

android - 如何获取此 git 脚本制作的补丁列表?

c - getaddrinfo 中返回的 sin_port 错误

c# - 是否可以以文化不变的方式动态构建字符串?