如何在Bash中运行C编译程序test以触发指定main()代码逻辑
当然可以实现!
核心逻辑很简单:你的C程序里argc != 2的判断是在检查命令行参数的总数(argc包含程序本身的路径作为第一个参数)。当你只运行./test时,argc的值是1,所以会进入参数提示分支;只要给程序传递一个命令行参数,argc就会变成2,程序就会执行你想要的那三行逻辑。
具体操作步骤
在Bash里执行以下任意一种命令即可:
传递一个当前存在的文件(比如你的源代码文件
test.c):./test test.c这时候程序会成功打开文件,执行第一次
close输出closed,第二次close因为文件描述符已经失效,会触发perror输出错误信息,完全符合代码里的预期。或者传递当前目录(目录允许用
O_RDONLY打开):./test .效果和上面一致,同样会触发两次
close的逻辑,第二次报错。
为什么这能生效?
当你在Bash中运行./test [参数]时,Shell会把程序路径和你提供的参数一起传递给C程序。此时argc的值会被设置为2(argv[0]是./test,argv[1]是你传入的参数),程序就会跳过参数错误的提示分支,执行kp_test_open、两次kp_test_close的代码逻辑。
如果想完整测试第二次close的错误场景,记得传递一个能被成功打开的路径(存在的文件或目录),这样第一次close会成功,第二次才会触发代码里注释的turi mesti close klaida(应该抛出close错误)。
内容的提问来源于stack exchange,提问作者Edvinas Deksnys
相关产品推荐
相关产品推荐

