Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scheme 恢复对封闭输入描述符进程的控制_Scheme_File Descriptor_Io Redirection - Fatal编程技术网

Scheme 恢复对封闭输入描述符进程的控制

Scheme 恢复对封闭输入描述符进程的控制,scheme,file-descriptor,io-redirection,Scheme,File Descriptor,Io Redirection,在scm(scheme解释器)中进行一些测试时,我特意关闭了当前输入端口(相当于标准输入文件描述符)。一旦程序在REPL中工作,事情就变得疯狂,系统地打印错误消息。我的问题是:我如何恢复进程的控制,也就是说,我如何重新建立这样的进程的输入文件描述符 搜索“更改正在运行的进程的文件描述符”或类似内容,我找不到有用的文章 提前谢谢 系统信息:Debian 10。您几乎肯定不能,尽管这稍微取决于语言级端口如何映射到底层操作系统级I/O系统 如果您所做的是关闭操作系统级标准输入,则所有内容都将丢失: R

在scm(scheme解释器)中进行一些测试时,我特意关闭了当前输入端口(相当于标准输入文件描述符)。一旦程序在REPL中工作,事情就变得疯狂,系统地打印错误消息。我的问题是:我如何恢复进程的控制,也就是说,我如何重新建立这样的进程的输入文件描述符

搜索“更改正在运行的进程的文件描述符”或类似内容,我找不到有用的文章

提前谢谢


系统信息:Debian 10。

您几乎肯定不能,尽管这稍微取决于语言级端口如何映射到底层操作系统级I/O系统

如果您所做的是关闭操作系统级标准输入,则所有内容都将丢失:

  • REPL尝试从标准输入读取,在关闭时收到错误
  • 它试图引起一些错误,包括提示用户输入
  • 。。。从标准输入,这是关闭的,所以它得到错误
  • 比赛结束了
  • 生存下来的唯一方法是实现以下两件事之一:

    • 或者您已经在代码周围包装了一个错误处理程序,该代码已经准备好处理这个问题
    • 或者,该实现足够聪明,能够识别出它在其闭端口错误处理程序中遇到了闭端口错误,并以某种聪明的方式放弃
    基本上,一旦操作系统级别的标准输入消失,任何需要从中获取输入的东西都注定要失败:如果没有操作系统级别的操作,就无法将其放回

    然而,实现可能将单个OS级I/O流映射到多个语言级流,并且仅关闭其中一个流将使系统剩下一些其他最后的流,它仍然可以与之对话,并且仍然引用OS级标准输入。Common Lisp是一个可以(根据配置)执行此操作的系统示例。例如,它有
    *标准输入*
    *错误输出*
    *查询io*
    *终端io*
    和其他流,并且很可能处于这样的情况,例如,
    *标准输入*
    已关闭,导致读取错误,但是,
    *查询io*
    仍然指向某个末端有人的地方


    我不知道scm是否会这样做。

    为什么关闭当前输入端口?这不是你通常会做的事。如果我明白你的意思,解决这个问题的最好办法就是避免这种显然毫无意义的情况,对吗?我同意这不是平常的事。但这不是重点。关键是如何恢复对流程的控制(即,不终止流程并再次打开)。您通常无法重新打开流程的标准输入–当然没有跨平台解决方案。(关键是关闭
    当前输入端口是一个需要删除的bug,而不是解决的bug。)我不认为关闭当前输入端口是一个独立于情况的bug。无论如何,你的答案是相关的。谢谢。终于有了一些强有力的想法。谢谢!