|
|
先看一下下面的代码:
#include <unistd.h>
#include <stdio.h>
int main(void) {
int pid;
char *tzip[6] = {"zip", "-9r", "ch.zip", "*.[ch]", NULL};
/* zip */
printf("\ncommand line: %s %s %s %s\n\n",
tzip[0], tzip[1], tzip[2], tzip[3]);
pid = execvp(tzip[0], tzip);
perror("execvp: tzip");
return 0;
} /* main */
这个程序的功能是把当前工作目录中的以.c和.h做扩展名的文件压缩到ch.zip文件中,但是它不能正常工作。编译并运行这个程序,给出下面的提示:
command line: zip -9r ch.zip *.[ch]
zip warning: name not matched: *.[ch]
zip error: Nothing to do! (try: zip -9r ch.zip . -i *.[ch])
这个错误出在 zip 不能正确解析 *.[ch] 这个带有通配符的参数上。在程序输出里面给出了一个命令行:
zip -9r ch.zip *.[ch]
如果我直接在 bash 的提示符下输入上面的这个命令行,zip 是可以正确解析 *.[ch]的,可以得到 ch.zip 这个压缩包。
经过测试发现,在程序中调用 zip 时出现的错误,和在bash提示符下输入这样的命令行出现的错误是一样的:
zip -9r ch.zip "*.[ch]"
这个命令行也给出下面这样的提示:
zip warning: name not matched: *.[ch]
zip error: Nothing to do! (try: zip -9r ch.zip . -i *.[ch])
小弟实在是不明白怎么回事,也不知道该怎么做才能解决这个问题,望高手赐教! |
|