如何获取充当 stdin/stdout 的文件的名称?

2023-11-21

我遇到以下问题。我想用 Fortran90 编写一个程序,我希望能够像这样调用:

./program.x < main.in > main.out

除了“main.out”(我可以在调用程序时设置其名称)之外,还必须编写辅助输出,我希望它们具有与“main.in”或“main.out”类似的名称(它们是实际上并不称为“主”);但是,当我使用:

INQUIRE(UNIT=5,NAME=sInputName)

sInputName 的内容变为“Stdin”,而不是文件名。有没有办法在调用程序时获取链接到 stdin/stdout 的文件名?


不幸的是,I/O 重定向的要点是您的程序不必知道输入/输出文件是什么。在基于 UNIX 的系统上,您不能将命令行参数视为< main.in > main.out实际上是由 shell 处理的,shell 在调用程序之前使用这些文件来设置标准输入和输出。

您必须记住,有时标准输入和输出甚至不是文件,因为它们可能是终端或管道。例如

./generate_input | ./program.x | less

因此,一种解决方案是重新设计程序,使输出文件成为显式参数。

./program.x --out=main.out

这样你的程序就知道文件名。代价是您的程序现在负责打开(并且可能创建)文件。

也就是说,在 Linux 系统上,您实际上可以找到标准文件句柄从特殊的 /proc 文件系统指向的位置。每个文件描述符都会有符号链接

/proc/<process_id>/fd/0 -> standard_input
/proc/<process_id>/fd/1 -> standard_output
/proc/<process_id>/fd/2 -> standard_error

抱歉,我不懂 fortran,但检查输出文件的伪代码方法可能是:

out_name = realLink( "/proc/"+getpid()+"/fd/1" )
if( isNormalFile( out_name ) )
    ...

请记住我之前所说的,不能保证这实际上是一个普通文件。它可以是一个终端设备,一个管道,一个网络套接字,等等......另外,我不知道除了 redhat/centos linux 之外,它还可以在哪些其他操作系统上运行,所以它可能不那么便携。更多的是一种诊断工具。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取充当 stdin/stdout 的文件的名称? 的相关文章

  • 如何像用户打字一样将输入发送到控制台?

    这是我的问题 我有一个程序必须在 TTY 中运行 cygwin 提供了这个 TTY 当我重定向 stdIn 时 程序失败 因为它没有 TTY 我无法修改该程序 并且需要某种方法使其自动化 如何抓取 cmd exe 窗口并向其发送数据并使其认
  • 如何将 model.summary() 保存到 Keras 中的文件?

    有model summary 方法 https keras io models about keras models 在喀拉斯 它将表打印到标准输出 是否可以将其保存到文件中 如果您想要摘要的格式 您可以传递print功能为model su
  • 在Python中解析制表符分隔的文件

    我正在尝试在 Python 中解析一个制表符分隔的文件 其中与行开头分开的 k 个制表符的数字应该放入第 k 个数组中 除了逐行读取并执行简单解决方案将执行的所有明显处理之外 是否有内置函数可以执行此操作 或者有更好的方法 您可以使用the
  • kqueue() 和 O_NONBLOCK

    如果您使用 kqueue 是否应该在文件描述符上设置 O NONBLOCK 换句话说 无论 O NONBLOCK 是否设置 kqueue 是否保证就绪文件描述符上的下一个 I O 操作不会阻塞 如果您使用 kqueue 是否应该在文件描述符
  • 常规文件读取可以从非阻塞 IO 中受益吗?

    对我来说似乎不是 我找到了一个支持我的观点的链接 http www remlab net op nonblock shtml 你怎么认为 您发布的链接内容是正确的 以非阻塞模式打开的常规文件套接字将始终 准备好 读取 当您实际尝试读取它时
  • 使用 python-shell 持续交换数据

    我需要从节点运行一些 python 脚本 由于我的 python 脚本使用复杂的结构 我认为如果只加载这些结构一次 然后使用这些结构运行一些特定的脚本 任务 会更好 在节点上 我想永远运行一个脚本 或者直到我说它可以终止 并继续向该脚本发送
  • 从 stdin 读取后,PHP 在每行上给出尾随“=”

    stdin 的内容因自动换行和尾随 而被损坏 这显然破坏了我需要发布的 URL 我需要从电子邮件中提取 URL 链接 然后发布该 URL 因此 我使用我在互联网上看到的标准代码片段将电子邮件传输到 cpanel 中的 php 脚本 fd f
  • 将 stdout 作为命令行 util 的文件名传递?

    我正在使用一个命令行实用程序 该实用程序需要传递文件名以将输出写入 例如 foo o output txt 它唯一写入的东西stdout是一条消息 表明它运行成功 我希望能够通过管道传输写入的所有内容output txt到另一个命令行实用程
  • Python3 http.server:将日志保存到文件中

    我使用Python3 6编写了一个简单的HTTP服务器来重定向所有请求 我写的文件可以找到here https github com kmahyyg learn py3 blob master antiscanhttp py 我可以在 Ub
  • 停止从标准输入读取

    我正在用 LInux C 编写一个简单的控制台应用程序 它接受来自命令行的用户输入 我在用std getline std cin std cin gt gt text在一个线程中 10 秒后 我想停止接受控制台输入并写一条短信 然后做其他事
  • Haskell 输入返回元组

    我想知道 IO 函数是否可以返回元组 因为我想从这个函数中获取这些元组作为另一个函数的输入 investinput IO gt Char Int investinput do putStrLn Enter Username username
  • Python getstatusoutput 替换不返回完整输出

    我发现了这个很棒的替代品getstatusoutput Python 2 中的函数在 Unix 和 Windows 上同样有效 不过我觉得这个方法有问题output被构建 它只返回输出的最后一行 但我不明白为什么 任何帮助都是极好的 def
  • p 调用非托管 DLL 时获取标准输出?

    我有一个非托管 DLL 它将日志消息写入标准输出 我正在使用 WPF 应用程序中的 P 调用来调用此 DLL 并且我需要获取标准输出流日志 我尝试过 Console SetOut 但似乎只能捕获使用 Console Write 等写入的信息
  • 从标准输入读取字符串长度[重复]

    这个问题在这里已经有答案了 我想从标准输入获取一个字符串 但我不想要固定大小的静态数组 我知道 scanf 需要保存标准输入的东西 但我不能做这样的事情 char string 10 scanf s string 因为我需要先知道字符串有多
  • 如何读取 Fortran 中内容不以空格分隔的 2D 文件

    我有一个矩阵存储在文件 number txt 中 如下所示 12323456 54254311 76534522 我如何在 Fortran 中读取这样的矩阵 结果将是 1 2 3 2 3 4 5 6 5 4 2 5 4 3 1 1 7 6
  • 从 ffmpeg 获取实时输出以在进度条中使用(PyQt4,stdout)

    我已经查看了很多问题 但仍然无法完全弄清楚 我正在使用 PyQt 并且希望能够运行ffmpeg i file mp4 file avi并获取流式输出 以便我可以创建进度条 我看过这些问题 ffmpeg可以显示进度条吗 https stack
  • 有没有一种简单的方法来准备 Fortran 代码以进行并行调用

    我想使用 OpenMP 在 C 程序中并行求解多个大型 ODE 系统 由于某些原因 我需要使用 ODE 求解器 但我只能找到 Fortran 90 子例程 而且代码太大 无法简单地将其转换为 C 我知道 Fortran 广泛使用静态内存 因
  • 如何格式化整数以仅具有所需的大小?

    我一直在尝试以下代码 program hello write i9 10 end program hello 并改变格式字符串 尝试使写入输出的字符串大小恰好满足表示整数所需的大小 但到目前为止我无法管理它 如何在 Fortran 中编写
  • 高级 Win32 图像文件 I/O?

    我想在 Windows C 应用程序中将图像文件读入内存 什么是一个相当简单的解决方案 也许类似于 IOS 提供的UIImage 我希望支持合理数量的文件格式 我需要为图像处理的位图提供一些低级访问权限 我在互联网上阅读了很多内容 看起来
  • C 将标准输出恢复到终端

    我正在使用多线程程序 首先 我将标准输出重定向到某个文件 没问题 我用过dup2 fd 1 where fd是文件的文件描述符 之后 我需要再次将标准输出重定向到终端 我的第一个方法 Declaration fpost t stream s

随机推荐

  • jq 是否已安装并在 PATH 上可用?

    我正在尝试读取 gitlab CI 中的 yaml 文件 我安装了jq 1 0 2 and yq 2 10 1 using pip在我的 CI 工作中 我使用 python 3 7 图像 当我尝试读取 yaml 文件时 出现错误 yq Er
  • 如何为 S3 对象创建 java OutputStream 并向其写入值?

    使用 AmazonS3 类中的方法将内容添加到 S3 文件的现有方法有 通过带有输入流的 putObject 创建包含内容的本地文件并将其上传到 S3 有没有办法为现有的 S3 对象创建一个 OutputStream 可以将列表中的值写入其
  • 当 SCREEN_ON 接收器被触发时,如何禁用键盘防护并向用户显示活动?

    当 screen on 激活广播接收器时 如何禁用键盘保护 以便当它发生时用户可以看到我在其后面启动的活动 活动已经开始 我一直在尝试从屏幕关闭触发的广播接收器中执行以下代码 KeyguardManager myKeyGuard Keygu
  • .NET 正则表达式中的 \d 与 [0-9] [重复]

    这个问题在这里已经有答案了 我经常看到 0 9 用于 Stack Overflow 上的 NET 正则表达式答案 而不是 d 我问过为什么 答案往往是 d匹配的不仅仅是 0 9 那么它还匹配什么呢 这张表说它匹配十进制数字 那么呢 p Nd
  • Maven 安装插件:参数文件丢失或无效

    我有一个本地 jar 我想在我的项目中使用它 有很多方法可以做到这一点 只需手动安装到本地存储库中 使用父 pom 中的脚本进行安装 使用系统范围 使用本地存储库声明 我决定使用 Maven Install 插件将 jar 安装到存储库中
  • gcc 编译标志

    谁能解释一下为什么我们在 gcc 中使用 m 标志 我运行 man gcc 命令结果很不清楚 任何人都可以解释一下这个标志在编译中的作用吗 如何使用 m 标记其正确的语法 我需要它 因为我正在通过 make 命令运行自动生成的 makefi
  • Web API ModelBinders - 如何以不同方式绑定对象的一个​​属性

    我有以下操作签名 ValidateInput false public HttpResponseMessage PostParam Param param Param 看起来像这样 public class Param public int
  • 非静态方法 PEAR::isError() 不应静态调用

    从 RHEL 5x 升级到 CentOS 6x 后 我开始在 httpd 日志中看到以下错误 PHP 严格标准 非静态方法 PEAR isError 不应该 在 web sites blah somescript php 第 33 行静态调
  • 为什么 strncpy 被标记为不安全?

    我收到警告 warning C4996 strncpy This function or variable may be unsafe Consider using strncpy s instead To disable deprecat
  • 如何有选择地合并或选择 Git 中另一个分支的更改?

    我正在一个新项目上使用 Git 该项目有两个并行的 但目前是实验性的 开发分支 master 导入现有代码库以及我通常确定的一些修改 exp1 实验分支 1 exp2 实验分支 2 exp1 and exp2代表了两种截然不同的架构方法 在
  • 为什么 byte += 1 可以编译,而 byte = byte + 1 不能编译?

    如果我有一个字节变量 byte b 0 为什么以下工作有效 b b 1 compiles 但这不 b b 1 compile error 编译器首先理解为byte第二个是int EDIT 我知道选角 但我想提请你注意b b 1 and b
  • 如何在Flutter中使用Dart http包指向localhost:8000?

    我正在关注Flutter 网络 HTTP 教程向在我的 localhost 8000 上运行的服务器发出 GET 请求 通过浏览器访问我的本地主机工作正常 我的代码如下所示 var url http localhost 8000 Futur
  • 如何将 puppeteer-core 与 electro 结合使用?

    我从另一个 Stackoverflow 问题中得到了这段代码 import electron from electron import puppeteer from puppeteer core const delay ms number
  • max_input_vars 设置即使在 php.ini 中注释

    我的 PHP 应用程序有一个奇怪的问题 在我的 php ini 中 我已经注释掉了max input vars指令 但是当提交 1 2k 表单时 我知道它有点大 最后 200 个帖子值被截断 奇怪的是我什至重新启动了我的 Apache 我的
  • 不同 .config 文件上的 AppSettings 未更新

    我正在尝试做与最近提到的完全相同的事情上一个问题 本质上 情况是这样的 这与我的情况完全相同 我的计划是拥有这些 appSettings 在他们自己的文件 Settings config 中 我将授予修改权 Web进程用户的权限 帐户 并存
  • 在 C++ 中将数组的所有元素初始化为一个默认值?

    C 笔记 数组初始化有一个关于数组初始化的很好的列表 我有一个 int array 100 1 期望它充满 1 但事实并非如此 只有第一个值是 其余的都是 0 与随机值混合 The code int array 100 0 工作正常并将每个
  • android 在同一个活动中添加两个工具栏?

    我有一个底部菜单作为工具栏 我需要在顶部添加另一个菜单作为操作栏 这是活动的代码 public class ListViewPharms extends AppCompatActivity public Toolbar mToolbar L
  • hibernate复合主键包含复合外键,如何映射这个

    我在那里搜索 没有找到任何类似的主题 所以我发布了一个新问题 我正在现有数据库上使用 Hibernate 我们不允许更改表结构和数据 应用程序从数据库读取数据并根据某种逻辑迁移到另一个数据存储 现在的问题是关于复合 PK 映射 例如 表 A
  • Flux 未在 Spring 5 Reactor 中订阅

    我可能错过了一些东西 但我不知道它是什么 下面的代码什么也不做 webClient get uri some path here retrieve bodyToMono GetLocationsResponse class doOnNext
  • 如何获取充当 stdin/stdout 的文件的名称?

    我遇到以下问题 我想用 Fortran90 编写一个程序 我希望能够像这样调用 program x lt main in gt main out 除了 main out 我可以在调用程序时设置其名称 之外 还必须编写辅助输出 我希望它们具有