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

时间:2015-11-08 20:22:16

标签: c++ c linux system

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

system是否仅依赖于平台,而“C系统”调用是system的ontop,并根据所使用的平台自动更改其执行?

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

3 个答案:

答案 0 :(得分:6)

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

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

例如,要创建目录:

使用shell,使用mkdir命令,请参阅http://linux.die.net/man/1/mkdirsystem C函数调用shell来调用这样的命令:

system("mkdir foo");

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

它直接在C中使用:

mkdir("foo", 0755);

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

答案 1 :(得分:3)

术语"系统调用"适用于操作系统本机函数,如pipeforkwrite(在Linux等POSIX平台上),它与函数system无关。然后你就拥有了在C(或C ++)规范中指定的标准库,并且通常建立在操作系统本机"系统调用"。

之上。

阅读,例如this Wikipedia "system call" articlethis about standard libraries了解详情。

此外,没有操作系统调用或C(或C ++)标准库函数执行调用system函数,事实上system函数是使用较低级系统调用实现的< / em>(如Linux上的forkwait)。 system函数是C和C ++中标准库的一部分。

答案 2 :(得分:2)

system函数本身基本上生成一个shell进程并启动该程序,就像用户刚从命令行中输入它一样。

&#34;系统调用&#34;在另一个意义上,运行时库用来调用操作系统来执行程序代码无法对其执行的操作。例如:打开文件,启动另一个进程以及任何类型的I / O操作。在Linux上,大多数这些系统调用都公开为程序可以调用的C函数API执行这些操作(例如打开,读取等)。所有Linux系统调用都列在手册页上:http://man7.org/linux/man-pages/man2/syscalls.2.html