【发布时间】:2021-01-31 13:49:30
【问题描述】:
此问题已关闭,消息指示我对其进行编辑或删除,并可能发布一个新问题;但是,系统不允许我删除它,并表示其他人付出了太多努力才能将其删除。
没关系。如果有兴趣,@jfs 在评论here 中提供了答案。 我很欣赏这篇文章中的 cmets 和答案,但应该指出浏览器可以仅通过本机消息传递 API 与 C 程序交换消息。除了此MDN document 和此MDN document 中提供的特定于操作系统的设置说明之外,开发人员不需要其他任何内容。尽管我的 C 问题很新手,但即使我也完成了这部分工作。
谢谢。
我正在尝试在浏览器扩展程序和本机 c 程序之间设置本机消息传递。我很确定我了解扩展方面并准备好进行测试;但自从 Borland Turbo C 流行以来,我就没有使用过 C。
能否请您指出有关如何使用 C 中的 stdin 和 stdout 从浏览器接收和发布消息的信息?我确定我只是在寻找错误的地方,但我遇到的所有内容都与键盘和文件有关,而不是来自另一个程序的输入。我认为我可以在获得信息后对其进行操作,但我被困在相当于设置通信端口侦听器的第一步。
谢谢。
我想在 C# 中完成类似 this 之类的操作,但对于 public static JObject Read() 中的以下代码,我不遵循 C 中的等效项:
var stdin = Console.OpenStandardInput();
var lengthBytes = new byte[4];
stdin.Read(lengthBytes, 0, 4);
This 问题类似于正在发生的事情。浏览器就像这张海报的 Java 程序一样,它打开 C 程序并传递数据。我只是对stdin 是否必须从键盘重定向到与此数据传递相关的内容感到困惑,或者它是否只会拾取发送给它的任何数据。而且,键盘输入怎么在这期间没有被拾起?
【问题讨论】:
-
无论输入来自何处,您都从 C 中的文件中读取。
stdin是标准文件号0。你可以使用面向字符的输入getchar()、fgetc()等,你可以使用面向行的输入、fgets()或POSIXgetline(),或者您可以使用格式化输入,例如scanf()或fscanf()。 (虽然在这里您最好使用fgets()阅读,然后使用sscanf()解析缓冲区中的值)如果它是二进制数据,那么您将使用fread()或较低级别的系统调用read(),区别在于无论您使用的是文件流还是文件描述符。 -
为了补全,
stdout是对应于标准文件号1和stderr文件号2的流。从文件描述符的角度来看,它是STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO。 -
谢谢。我阅读了这些方法并在其他输入上尝试了它们,但肯定遗漏了一些明显的东西。所有的例子和我的书都是从打开一个文件开始阅读的。我错过了如何从浏览器消息中获取与输入相关联的标准文件编号 0?
-
请edit 提供更多详细信息:什么计算机、什么操作系统、什么 C 编译器。在您的问题中还提供一些minimal reproducible example。
-
@Basile Starynkevitch 我想这样做,但使用 C 而不是 C#。 stackoverflow.com/questions/30880709/…,但我不明白
stdin将如何阅读传入的消息,但我想我现在明白了。