分页: 1 / 1

[solved]新手再请教一下,关于系统调用的问题。

发表于 : 2013-02-20 11:33
ifoolb
老实说我这种习惯c++面向对象方法的人读 advanced programming Unix environment 真的很吃力,对stdlib 和unistd 一点都不熟悉。我在用系统调用的时候很疑惑,感觉不管是exec 系列还是system()函数都是用shell去调用一个新程序,但我却始终不太明白shell在unix和类unix中的地位究竟如何。难道它与内核深度整合,但是人们又说shell高级语言的效率当然低于低级语言的效率,既然如此那不是exec系统调用对shell的依赖很强,效率也不高?那么,是否存在不通过shell来运行一个程序的方法呢?

Re: 新手再请教一下,关于系统调用的问题。

发表于 : 2013-02-21 1:47
onemoo
shall是供用户(人)来操作系统用的。

在shall中启动一个新程序时,首先会fork()一个新进程,然后通过exec()系统调用执行相应的ELF文件。

在程序中直接fork的话,不就是不通过shall来运行一个程序了么。
同上,shall本身也是个程序,这就是由一个程序来启动另一个程序。

Re: 新手再请教一下,关于系统调用的问题。

发表于 : 2013-02-21 9:17
zhw2101024
感觉不管是exec 系列还是system()函数都是用shell去调用一个新程序
把感觉当事实,这就是你纠结的原因所在。为什么我搜索的结果是exec在shell里面执行程序,system()不需要通过shell调用呢?

Re: 新手再请教一下,关于系统调用的问题。

发表于 : 2013-02-21 9:54
buzzerrookie
exec不是通过shell执行的,system才是用shell执行的。APUE讲了exec函数族

Re: 新手再请教一下,关于系统调用的问题。

发表于 : 2013-02-21 16:31
ifoolb
buzzerrookie 写了:exec不是通过shell执行的,system才是用shell执行的。APUE讲了exec函数族
非常感谢你的解答。
我的学的比较粗浅,advanced programming unix environment 我读起来很费力,已经放弃了。现在在读the linux programming interface,虽然我英语也不好,但是该书讲的很细致,可读性更强,就是篇幅非常的大,1500页左右,目前我只看了百多页。

Re: [solved]新手再请教一下,关于系统调用的问题。

发表于 : 2013-02-21 20:32
buzzerrookie
推荐先看看 《The UNIX Programming Environment》(中译本《UNIX编程环境》),然后再看APUE也不迟。