%EF%BC%8C%E4%BD%86%E6%B2%92%E6%9C%89%E6%AA%94%E6%A1%88%E6%8F%8F%E8%BF%B0%E7%AC%A6%20(fd)%20%E7%9A%84%E9%A1%9E%E5%9E%8B%EF%BC%9F.png)
我看到它pid_t
是在 中定義的unistd.h
,並且文件描述符被定義為int
在 中fcntl.h
。但由於它們的使用方式相似,所以使用typedef
for 檔案描述符不是有意義嗎?
答案1
在閱讀其他回覆之前,我的猜測是pid_t
出於可移植性原因而存在。在過去的美好時光,有些 Unix 有short
PID,其他 Unix 有int
PID,因此您可以為 PID 定義系統特定的類型。我不記得使用int
文件描述符有任何痛苦,即使是在 64 位元的早期。
答案2
我認為這是 C 標準(fcntl.h)和 POSIX 標準(unistd.h)之間的哲學差異。 C 具有盡可能少的類型(包括 size_t 和 time_t),而 POSIX 具有盡可能多的類型以使程式碼更清晰(例如 pid_t、gid_t 和 size_t)。
答案3
PID 可用於更多功能目的,用於識別與某些參數(即時間、大小、持續時間等)相關的唯一進程,從而更容易調用特定 PID,因為相同的進程可以在 x 數量內多次發生的時間。文件描述符不需要類型,因為文件本身可以通過其唯一名稱輕鬆調用。