首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >系统调用与C/C++系统调用

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

Stack Overflow用户
提问于 2015-11-09 04:22:16
回答 3查看 20.6K关注 0票数 8

我目前正在编写一个C程序,其中一个限制是我不能使用system调用外部程序。相反,我需要使用C/C++库中的系统调用来熟悉这种语言。我在理解“系统”调用和"C/C++系统“调用之间的区别时遇到了一些麻烦。

当"C系统“调用建立在system之上的构建并根据所使用的平台自动更改其执行时,system仅仅依赖于平台吗?

希望我的问题是清楚的。提前感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-11-09 04:36:04

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

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

例如,要创建一个目录:

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

代码语言:javascript
复制
system("mkdir foo");

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

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

代码语言:javascript
复制
mkdir("foo", 0755);

使用后一个调用的好处是,它更容易检查错误条件,并且不会发生分叉来将工作委派给子进程,这使得该解决方案更快,内存使用更少,等等。

票数 11
EN

Stack Overflow用户

发布于 2015-11-09 04:31:04

术语“系统调用”是指操作系统的本机函数,如pipeforkwrite (在POSIX平台上,如Linux),它与函数system无关。然后你就有了标准库,它是在C(或C++)规范中指定的,通常建立在操作系统本地“系统调用”的基础上。

有关更多信息,请阅读this Wikipedia "system call" articlethis about standard libraries

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

票数 4
EN

Stack Overflow用户

发布于 2015-11-09 04:32:35

system函数本身基本上会产生一个外壳进程,并启动该程序,就像用户刚从命令行输入命令一样。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33598606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档