1

我想测试 2 个 C 程序来检查它的覆盖率(行覆盖率和分支覆盖率)。

我在 linux 系统中使用 gcovr。

为此,我编写了一个 Perl 脚本,它将调用 gcc编译器并从文件中读取输入,然后测试 C 程序的覆盖率。

我有许多以文件形式提供给 C 程序的测试套件,我使用 Perl 来自动化输入并使用gcovr.

当然,我 system在 perl 中使用过 command 和 backtics 来调用gccgcovr.

第一个 C 程序运行良好,因为程序的输入是从给定的参数中读取的。

但是对于第二个 C 程序,我感到困惑,因为该程序只接受来自键盘的输入,或者简单地说“它正在使用scanf”。

scanf那么,我们如何通过终端 linux 或使用 perl命令向仅接受键盘输入的 C 程序提供输入system

4

2 回答 2

0

scanf接受来自 的输入stdin。当您启动程序并让程序从该文件中获取输入时,您可以重定向stdin到一个文件。

重定向是操作系统的一项功能,而不是特定语言的一项功能。

假设您想启动您的程序,并且您知道该程序将接受 '10' 'y' 和 'n' 作为输入。您所要做的就是通过任何方式创建一个包含这些行的文件。假设这个文件名为 test_1。

然后启动程序,tested_program < test_1程序将使用“10”、“y”和“n”作为输入。

于 2016-01-01T16:18:29.713 回答
0

如果使用 Perl 命令system不是严格要求,您可以考虑使用Open3代替。它比系统更高级,您可以指定用于 STDIN、STDOUT 和 STDERR 的内容。因此,您可以将 C 程序的输入写入文本文件,创建该文件的句柄,然后使用 Open3 调用您的 C 程序,将该文件句柄指定为第一个参数。

于 2016-01-01T17:25:41.553 回答