首页 > 解决方案 > 将可执行的 C 程序发送给某人

问题描述

我只是想向朋友发送一个可执行的有趣的 C 程序(它要求一个名称并打印有趣的东西printf("What a lovely name you have, %s!\n", name);),我对此有一个想法,但我想知道这是否可能。有什么办法可以看到他们的输入吗?例如,一个朋友在他/她的电脑上打开程序并在其中输入他/她的名字,有没有什么方法可以接收输入的信息?我不是想破解或做坏事,我只是好奇。或者我猜这超出了 C 的范围?

标签: c

解决方案


是的,这超出了 C 语言的范围。除了内存之外,该语言本身没有关于其环境的概念。标准 C 带有一个标准库,尽管它允许与更广泛的环境进行标准化交互;这种标准化是 C 在起飞时取得成功的原因之一。

这个虚拟“标准库环境”最重要的部分是由 FILE 结构表示的数据源和/或接收器的概念。在这样的“流”上,可以执行一组有限的操作(即打开,可能带有一些名称,读/写和读/写定位)。

这些 C 标准库函数(fopen、fread、frwite 等)使用底层操作系统设施,但这些(故意)超出了语言或标准库的范围。

为了完整性: Posix是一个广泛可用的标准化操作系统接口。Posix 基本上标准化了 Unix 设施,但也可以在其他平台上使用(cygwin 就是一个例子)。Posix 与 C 很好地集成,C 是与 Unix 共同开发的,并共享其数据类型和理念。在许多(大多数?)C 实现中,Posix 函数的一些子集是可用的(例如,打开、读/写)。

Posix 标准化了 Unix 字节流的 I/O 概念,字节流由文件描述符、简单数字标识。这些可以通过open()文件系统“file”(首先是 Unix/Posix 上的抽象概念)上的命令获得,但也可以直接识别其他通信通道,如管道或套接字。这是可能的,因为“文件”描述符上的标准化接口非常小;它基本上仅限于未格式化的 I/O 和定位(并且其中任何一个都可能不适用于给定的描述符)。这些字节流的物理性质本质上与此核心功能无关。在您的情况下,您可能希望使用 Internet 套接字在两台计算机之间建立连接,例如通过您的计算机打开监听来建立(服务器)套接字和作为客户端连接到它的远程计算机。但是C 或其标准库都不知道这些,尽管套接字可能是计算机之间最常用的通信方式,但还有许多其他方式(例如,您可以通过电话“线路”建立“直接链接”)。


推荐阅读