I/O 能力允许程序与外部世界通信。在讨论这种通信时,需要区分交互式 I/O 和文件 I/O。交互式 I/O 通常表示与用户或者物理设备通信,与运行的程序是 parallel 的,程序的输入取决于之前程序的输出。文件通常表示操作系统实现的离线存储。文件更进一步划分为临时文件和持久性文件。临时文件只存在于程序运行期间;目的是存储大于内存的程序信息。持久文件允许在程序运行开始读取,程序写入之后程序结束后继续存在。

I/O 是编程语言设计里最难的方面之一,以及语言之间共同点最小的部分。有些语言提供内建的 file 类型,以及 I/O 的特定语法结构。有些都实现在库中,暴露出 file 类型和一些子历程。集成到语言的主要优势在于不需要子历程调用语法,不需要调用库。纯库实现的 I/O,可能会让语言定义“混乱”。