问题标签 [stdio]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - fprintf 如何在 Linux 中阻塞?
当系统 IO 忙但仍有大量 CPU 时,我有一个fprintf
呼叫阻塞了大约 10 秒。我既没有setvbuf
底层流也没有打开底层 fd O_DIRECT
。这意味着流同时具有 stdio 流和系统缓存。
我不知道一个fprintf
电话怎么会被阻止这么长时间。对于底层流的流缓冲区已满的最坏情况,我认为 libc 只是调用write(2)
将缓冲区内容写入磁盘。但据我所知,write(2)
在未打开的 fd 上O_DIRECT
不会等待磁盘传输,即它对于磁盘 IO 是异步的。所以我能想到的唯一耗时的工作是内核为写入的数据分配缓存,但这似乎不是一个 10 秒的工作,即使系统内存不足。实际上,系统有几十 MB 的空闲内存和几 GB 的缓存内存。
有什么建议吗?
谢谢。
python - 检查进程是否作为管道运行
我有一个小的 Python 实用程序,它只能作为管道运行。我希望它在独立运行时打印出帮助消息。进程如何知道它是否被用作管道。比较sys.stdin
并sys.__stdin__
不起作用。
linux-kernel - Linux中字符从键盘到应用程序的路径是什么?
在 1980 年代的计算机杂志(Kilobaud?Creative Computing?)中有一篇文章描述了按键如何发出键代码,它如何通过设备驱动程序,转换为 ASCII 代码,通过事件处理程序发送,等等等等等等,最终以应用程序通过标准输入(或其他等效项)接收的字节(或其他)结束。应用程序对其进行的操作超出了本文的范围。这篇文章很有趣,更多的是展示了当时操作系统和设备驱动程序的复杂性,而不是技术实用性。
现在在 2010 年,我们拥有具有非常大内核、可加载模块、unixey tty 事物和管道以及多处理层的 Linux……是否有一篇类似的文章发表在任何地方,将字符从键盘跟踪到某个应用程序的标准输入,描述了每一步方法?
寻找一些技术性的东西(没有被淡化到流行科学杂志的水平),但可以被内核和低级 IO 工作的非专家理解。
(如果没有这样的文章,请继续写一篇,将其作为答案发布在这里!)
c - 如何使用 C 从文件中读取二维数组?
我试过:
输入文件是:
输出是:
那个矩阵是从哪里来的?
python - How can I get those two processes (programs) talk to each other directly using pipes?
Program A, is a c program that endlessly, receives input in stdin, process it and output it to stdout.
I want to write program B (in python) so it will reads A's output, and feed it back with whatever is needed. Note there must be only one instance of each of those programs, so given b1 and b2 which are instances of b instead of:
I need to have
The following is the diagram of the final desired result:
c++ - 重定向 MFC GUI 应用程序中使用的 c++ dll 的控制台输出
我有一个 C++ dll 通过使用 printf 或 cout 的控制台输出报告许多有用的信息。我正在将此 dll 链接到我用 MFC 编写的 GUI 应用程序,并希望访问它的输出。
听起来很简单,是吗?好吧,经过数小时的互联网搜索并实施了几种解决方案,但都没有奏效,我感到很惊讶!
所以可能需要一些关于应用程序的额外信息。我有一个巨大的主机应用程序,我无权访问。实际上,我正在为它编写插件。它在运行时链接我的插件 dll(我想使用 LoadLibrary())。我的 dll 反过来使用我想要获取的输出的外部 dll。这个 dll 通过相应的 lib 文件静态链接到我的,所以 CRT 完成所有加载。
据我所知,任何应用程序(包括所有以任何方式加载的 dll)都有单个标准输出流(单个标准输入和单个标准错误)。那时事情对我来说太复杂了。我试图重定向这个标准输出流(显然,对于整个应用程序/进程),在某些情况下它适用于我的 dll,但它仍然不适用于外部 dll。即,如果我使用cout << "Hey!";
来自我的 dll 之类的东西,我可以在我已将流重定向到的文件中看到它。但是,来自外部 dll 内部的相同调用(是的,我有它的来源,但我真的不想更改它们)什么也没做。天知道这个输出是在哪里完成的。
我试过了:
- 好老
freopen()
把戏。为我的 dll 工作,对外部 dll 没有影响。 - WinAPI
SetStdHandle()
调用。根本不起作用。好像win7有点问题。 AllocConsole()
+_open_osfhandle()
. 与 1 相同。在控制台中查看我的输出,看不到外部 dll 的输出。cout.rdbuf()
重新分配。与 3 相同,但仅适用于 cout。
好吧,伙计们,我真的需要帮助。好像我被卡住了:-/
附加信息:
主机应用程序、我的 dll 和外部 dll 是使用 MSVS'05 开发的。所有 dll 都有“在静态库中使用 MFC”设置。测试是在 Win7 x64 下进行的。我确实有所有来源,但我无权更改它们。
c - putc 需要标准输出,而不是 puts
C历史问题在这里。为什么 C 函数putc
需要第二个参数,例如
虽然 puts 更方便
msvc++中有一个函数
其工作方式可能是人们期望putc
的工作方式。我认为的第二个参数putc
是能够定向putc
到一个文件,但有一个功能fputc
。
c - 在 C 中写入文件和控制台
我正在尝试编写一个函数,允许我在 C 中写入控制台和文件。
我有以下代码,但我意识到它不允许我附加参数(如 printf)。
我被困在这里。有小费吗?对于我要发送给函数的参数:footprints,它将由字符串、字符和整数组成。
是否有其他 printf 或 fprintf fns 可以尝试创建包装器?
谢谢,希望听到你们的回应。
java - 如何将 STDIO 重定向到 Java 应用程序上的 GUI 组件?
在 CI 上,将简单地创建几个管道并使用 dup2 覆盖 std 文件描述符,而在另一端,我将利用阻塞 IO 在无限循环上为每个输出管道(sdtout、sdterr)创建一个线程管道更新适合控制台建议的 textArea/canvas。至于标准输入,我会监听此类组件上的关键事件,并将其写入管道。
但是我怎样才能在 Java 上用 swing 来执行呢?
我不能将本机代码混合为项目指令。到目前为止,我已经违反了许多项目指令,所以我不能继续这样做......
此外,提供某种级别的终端仿真(例如 VT100)也很酷,但是如何在 unix 上通知 java 应用程序这种功能,我将设置 TERM envvar。
在 CI 上将执行以下操作:
objective-c - 需要作为一元“&”操作数的目标 C LValue
在我的代码中,当我尝试获取指向我的类属性的指针时出现此错误。
(我用 Python 写了一个小的 *.OBJ 文件翻译器,丢弃了法线)
代码: