【问题标题】:Why PID of a process is represented by opaque data type?为什么进程的PID用不透明数据类型表示?
【发布时间】:2012-02-14 09:46:29
【问题描述】:

进程的pid定义为 pid_t pid; 而 pid_t 是一种不透明的数据类型。如果进程的 id 号可以用 int 表示,为什么不将其声明为 int 族而不是对其用户隐藏其数据类型?

【问题讨论】:

    标签: linux process


    【解决方案1】:

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

    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 (wikipedia reference)。
    • 可维护性:确保将来可以根据需要更改所有 pid 变量的类型。例如,如果 pids 以后需要更广泛的数据类型(例如long int),您只需更改typedef,重新编译,一切正常。事实上,我相信这已经发生在不同的架构中。

    【讨论】:

      猜你喜欢
      • 2019-12-18
      • 1970-01-01
      • 1970-01-01
      • 2020-12-12
      • 1970-01-01
      • 2013-07-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      相关资源
      最近更新 更多