如何将多个小C程序组合在一起?

时间:2011-10-29 16:01:29

标签: c shell unix

其中一个unix哲学是编写小软件组件然后将它们连接在一起,比如uzbl或git例如,但我问你如何将它们组合在一起制作一个大的应用程序?如果我有兴趣将C程序粘合在一起,我是否会编写另一个程序,通过system()调用来调用它们来执行系统以提供所需的行为?有什么好的做法?我在哪里寻找这方面更深入的细节。

例如,我正在尝试开发自己的程序,并希望将程序的不同组件分开。例如,Web浏览器Uzbl或版本控制软件git如何将不同的二进制文件绑定在一起制作一个?

2 个答案:

答案 0 :(得分:4)

取决于您从哪个级别查看此内容。如果要在命令行中组合多个预构建程序,可以使用类似于Unix的管道,例如: dir | sort

如果您正在开发并希望重用现有代码,则可以将现有功能作为库链接到应用程序,或者只是重用现有类。

答案 1 :(得分:3)

你提到git,它最初是一个小工具的集合,每个小工具在存储库上执行相对较小的操作,以及一组使用这些工具的脚本(shell和Perl)。例如,您可以查看git pull的代码(实际上是一个shell脚本),看看它如何调用大多数git用户不知道的不同git程序。

通常,如果你想把程序的一部分写成过滤器,让它只是从stdin读取输入(使用fread,fgets,fscanf等)并将输出写入stdout(fprintf,fwrite等) 。然后,您可以使用管道在shell脚本中调用过滤器。

组合程序的另一种方法是通过双向进程间通信,即不通过shell脚本中的管道,而是使用例如插座。您可以将程序拆分为两个部分,即服务器和客户端,它们彼此通信但具有单独的目标。例如,X系统和FreeCiv就是这样编写的。

有些程序不易分解为多个较小的程序和过滤器。在这种情况下,通常最好将程序分解为库,这也是Unix哲学的一部分,因为库也可以被其他程序重用。

我还建议查看The Art of Unix Programming,其中详细介绍了软件工程和Unix哲学。