【问题标题】:How do you do systems work in C++?您如何在 C++ 中使用系统?
【发布时间】:2012-09-30 02:41:53
【问题描述】:

在我的计算机科学课程中,我们被教导在 C 中使用子进程、分叉、管道和文件描述符等,但我们从未在 C++ 中做过类似的事情。

您是否使用相同的库,或者 C++ 是否有自己的一些(希望是简化的)系统库?

【问题讨论】:

    标签: c++ c system-calls


    【解决方案1】:

    您所描述的事物类型实际上是系统特定的,而不是 C 特定的。如果您环顾四周,您可能会找到一些它们的包装器,但它们不是 C++ 标准(也不是 C 标准)的一部分。

    例如,没有理由在标准 C 中使用文件描述符。这就是文件结构、fopen、fclose、fread、fwrite 等的用途。如果您使用的是文件描述符,那是因为您学习的是操作系统而不是 C。

    【讨论】:

      【解决方案2】:

      分叉、管道、执行;父进程,子进程:您在谈论 POSIX。 POSIX 标准是用 C 而不是 C++ 编写的。除了少数例外,POSIX 库函数要么与 C 标准一致,要么对其进行扩充。您可以从 C++ 调用 C 函数,因此在符合 POSIX 的 C/C++ 系统上也可以使用相同的功能。但是,重点是 C 而不是 C++,因为 C++ 是库函数的原生语言,例如 forkexec 系列函数等等。

      C++11 采用了来自 POSIX 和 Windows 的线程概念,但重量级的多处理东西,如 fork 和 exec、管道等:这是基于 C 的。

      【讨论】:

      • 我认为实现 POSIX 的语言对于在 C 或 C++ 中使用没有任何影响。许多人错误地认为那些用 C 构建的函数应该由 C 客户端代码使用。一个经典的例子是带有 C 的 Win32 和带有 C++ 的 MFC。
      • Win32C 和 MFC 是专有的。它们不是国际标准。 POSIX 是。 POSIX 标准规定 POSIX 的编程接口是用 C 编写的,而不是 C++。 POSIX 标准对 C 标准库提出了许多超出 C 标准的要求,对编译器也提出了一些要求(包括至少一个标准冲突的地方。)
      【解决方案3】:

      没有什么特定于 C 或 C++ w.r.t 进程、子进程等。在 C 中编程时可用的内容应该可用于 C++。您始终可以使用可设计用于面向对象风格和 RAII 优势的包装类。

      【讨论】:

      • C++11 标准增加了很多有助于多处理和多线程的特性。
      • 这里的问题是特定于进程的。与 C++11 标准中的进程无关,这就是我所写的。也有充分的理由投反对票。
      猜你喜欢
      • 1970-01-01
      • 2013-10-05
      • 2017-05-29
      • 1970-01-01
      • 2015-01-18
      • 1970-01-01
      • 2020-07-20
      • 1970-01-01
      相关资源
      最近更新 更多