如何序列化和反序列化私有类型?

How can I serialize and deserialize a private type?

我正在使用 GNAT.OS_Lib 模块为 Linux 实施流程管理器。我正在使用该模块中的子程序来生成进程并取回 PID,现在我想将这些 PID 保存到一个文件中,以便稍后可以检索它们以终止进程、获取其状态等。问题是, Process_Id 类型是私有的:

type Process_Id is private; -- s-os_lib.ads, line 743

该模块提供了一个Pid_To_Integer函数,但没有提供反函数。如何序列化和反序列化 Process_Ids?

学习 Ada 语言参考手册中的 K.2 节“语言定义的属性”http://www.ada-auth.org/standards/12rm/html/RM-K-2.html

要学习的属性是 S'Read, S'Write。

您的文件必须创建为流文件。 Process_Id'Write 属性将序列化并写入流文件。 Process_Id'读取属性将读取并 de-serialize 文件中的数据。

如果由于复合类型的性质,S'Read 和 S'Write 不适合您,您应该使用 S'Input 和 S'Output 属性,它们将读取和写入任何边界或判别式。

S'Input 和 S'Output 将适用于所有类型。