我目前正在编写一个C程序,其中一个限制是我不能使用system调用外部程序。相反,我需要使用C/C++库中的系统调用来熟悉这种语言。我在理解“系统”调用和"C/C++系统“调用之间的区别时遇到了一些麻烦。
当"C系统“调用建立在system之上的构建并根据所使用的平台自动更改其执行时,system仅仅依赖于平台吗?
希望我的问题是清楚的。提前感谢!
发布于 2015-11-09 04:36:04
基于Linux的操作系统以两种方式公开功能:
例如,要创建一个目录:
在使用shell时,使用mkdir命令,请参见http://linux.die.net/man/1/mkdir。system C函数调用外壳来调用这样的命令:
system("mkdir foo");相应的系统调用也称为mkdir,现在请参阅http://linux.die.net/man/2/mkdir。
它直接在C中使用,如下所示:
mkdir("foo", 0755);使用后一个调用的好处是,它更容易检查错误条件,并且不会发生分叉来将工作委派给子进程,这使得该解决方案更快,内存使用更少,等等。
发布于 2015-11-09 04:31:04
术语“系统调用”是指操作系统的本机函数,如pipe、fork或write (在POSIX平台上,如Linux),它与函数system无关。然后你就有了标准库,它是在C(或C++)规范中指定的,通常建立在操作系统本地“系统调用”的基础上。
有关更多信息,请阅读this Wikipedia "system call" article或this about standard libraries。
此外,没有操作系统调用,或者C(或C++)标准库函数实际上都调用system函数,事实上,system函数是使用低级系统调用(如Linux上的fork和wait )实现的。system函数是C和C++标准库的一部分。
发布于 2015-11-09 04:32:35
system函数本身基本上会产生一个外壳进程,并启动该程序,就像用户刚从命令行输入命令一样。
在另一种意义上,“系统调用”是指运行时库调用操作系统来执行程序代码本身无法执行的操作。例如:打开一个文件,启动另一个进程,以及任何类型的I/O操作。在Linux上,这些系统调用中的大多数都是作为C函数API公开的,您的程序可以调用这些API来执行这些操作(例如,打开、读取等)。所有Linux系统调用都列在手册页上:http://man7.org/linux/man-pages/man2/syscalls.2.html
https://stackoverflow.com/questions/33598606
复制相似问题