操作系统热线电话
C程序无论做什么事都要靠操作系统。如果它想与硬件打交道,就要进行系统调用。系统调用是操作系统内核中的函数,C标准库中大部分代码都依赖于它们。每当调用printf()
在命令行显示字符串时,C程序都会在幕后向操作系统发出系统调用,把字符串发送到屏幕。
下面来看一个系统调用的例子,我们将从一个名副其实的系统调用——system()
开始。
system()
接收一个字符串参数,并把它当成命令执行:
system()
函数是在代码中运行其他程序的捷径,特别是在建立快速原型时,与其写很多C代码,不如调用外部程序。
代码冰箱贴
下面这个程序将一段带有时间戳的文本写到日志文件的底部。整个程序都可以用C语言来写,但程序员用了system()
调用,因为它可以更快速地处理文件。
你能补全代码吗?代码创建了一条命令字符串,它先显示注释文本,接着是时间戳。
代码冰箱贴解答
下面这个程序将一段带有时间戳的文本写到日志文件的底部。整个程序都可以用C语言来写,但程序员用了system()
调用,因为它可以更快速地处理文件。
你将补全代码。代码创建了一条命令字符串,它先显示注释文本,接着是时间戳。
试驾
编译程序,看看它是如何工作的:
当你查看程序所在目录时,程序创建了一个叫reports.log的新文件。
程序工作了。它从命令行读取注释,然后调用echo
命令把注释追加到文件底部。
整个程序都可以用C语言来写,但你用system()
简化了程序,可谓事半功倍。
这里没有蠢问题
问:
system()
函数会编译到我的程序中吗?答:不会,和所有系统调用一样,
system()
函数不在你的程序里,而在操作系统中。问:所以我在进行系统调用时会调用外部代码,像库一样,是吗?
答:差不多,但具体细节要看操作系统。在一些操作系统中,系统调用的代码位于操作系统内核。而对其他操作系统而言,系统调用可能保存在动态库中。