如何序列化和反序列化私有类型?
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_Id
s?
学习 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 将适用于所有类型。
我正在使用 GNAT.OS_Lib
模块为 Linux 实施流程管理器。我正在使用该模块中的子程序来生成进程并取回 PID,现在我想将这些 PID 保存到一个文件中,以便稍后可以检索它们以终止进程、获取其状态等。问题是, Process_Id
类型是私有的:
type Process_Id is private; -- s-os_lib.ads, line 743
该模块提供了一个Pid_To_Integer
函数,但没有提供反函数。如何序列化和反序列化 Process_Id
s?
学习 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 将适用于所有类型。