为什么进程的PID用不透明的数据类型表示?

发布于 2025-01-05 11:26:35 字数 107 浏览 0 评论 0原文

进程的 pid 定义为 pid_t 进程号; 而 pid_t 是一种不透明的数据类型。如果进程的 ID 号可以用 int 表示,为什么我们不应该将其声明为 int 系列,而不是向用户隐藏其数据类型呢?

The pid of a process is defined as
pid_t pid;
whereas, pid_t is an opaque data type. If the process's id number can be represented by an int, why should not we declare it as an int family rather then hiding its data type from its users?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

丶视觉 2025-01-12 11:26:35

这并不是真正的不透明类型,而是整数类型的别名。例如,在我的系统中,我在不同的头文件中找到以下内容:

typedef __pid_t pid_t;
...
# define __STD_TYPE     typedef
__STD_TYPE __PID_T_TYPE __pid_t;    /* Type of process identifications.  */
...
#define __PID_T_TYPE        __S32_TYPE
...
#define __S32_TYPE      int

因此,您是对的,pid_t 只是一个int。不过,我想说这样做有几个原因:

  • 可读性:明确变量将用作 pid (维基百科参考)。
  • 可维护性:确保将来如果需要的话可以更改所有 pid 变量的类型。例如,如果 pid 稍后需要更广泛的数据类型(例如 long int),您只需更改 typedef,重新编译,一切都会正常工作。事实上,我相信这对于不同的架构已经发生了。

That's not really an opaque type, but an alias to an integer type. For example, in my system, I find the following in different header files:

typedef __pid_t pid_t;
...
# define __STD_TYPE     typedef
__STD_TYPE __PID_T_TYPE __pid_t;    /* Type of process identifications.  */
...
#define __PID_T_TYPE        __S32_TYPE
...
#define __S32_TYPE      int

Hence, you're right in that pid_t is just an int. However, I'd say there are a couple of reasons to do this:

  • Readability: make clear that a variable is going to be used as a pid (wikipedia reference).
  • Maintainability: make sure that the type of all pid variables can be changed in the future if needed. For example, if pids need a wider data type later (such as long int), you just need to change the typedef, recompile and everything should work fine. In fact, I believe this already happens for different architectures.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文