系统调用与C/C++系统调用

Gee*_*ebs 3 c c++ linux system

我目前正在编写一个C程序,其中一个限制是我无法调用外部程序system.相反,我需要使用C/C++库中的系统调用在语言的习语中工作.我在理解"系统"调用和"C/C++系统"调用之间的区别时遇到了一些麻烦.

system简单地依赖于平台,而"C系统"要求建立ontop的的system,并自动更改正在使用基于该平台的它的执行?

希望我的问题很明确.提前致谢!

Som*_*ude 6

术语“系统调用”是针对操作系统本机函数的,例如pipeorforkwrite(在 Linux 等 POSIX 平台上),它与函数无关system。然后您就拥有了 C(或 C++)规范中指定的标准库,并且通常基于操作系统本机“系统调用”构建。

请阅读例如这篇维基百科“系统调用”文章,或有关标准库的文章以获取更多信息。

此外,没有操作系统调用或 C(或 C++)标准库函数实际调用该system函数,实际上该system函数是使用较低级别的系统调用(如Linux 上的fork和)实现的。waitsystem函数是 C 和 C++ 标准库的一部分。


Sir*_*ius 6

基于Linux的操作系统以两种方式公开功能:

  • 命令行工具通过shell
  • 系统通过C语言调用

例如,要创建目录:

使用shell,使用mkdir命令,请参阅http://linux.die.net/man/1/mkdir.的systemC函数调用一个壳调用这样的命令:

system("mkdir foo");
Run Code Online (Sandbox Code Playgroud)

也调用相应的系统调用mkdir,现在请参阅http://linux.die.net/man/2/mkdir.

它直接在C中使用,如下所示:

mkdir("foo", 0755);
Run Code Online (Sandbox Code Playgroud)

使用后一种调用的好处是更容易检查错误条件,并且不会将工作委托给子进程进行分叉,这使得此解决方案更快,更轻松地使用内存等等.