【发布时间】:2015-01-30 22:11:06
【问题描述】:
如何传递字符串参数,如下面的程序所示?
-f 后面的参数应该是一个带引号的字符串。我试图逃脱 \" 但没有用。我也尝试使用 ' and \' instead of \" 并再次失败。
#include <stdio.h>
#include <unistd.h>
int main(void)
{
char *args[] =
{
"/usr/ws/bin/tshark", "-i", "/tmp/ts_pipe", "-w",
"/tmp/output.pcap", "-f", "\"not src host 1.1.1.1\"", "2>",
"/tmp/error.log", NULL
};
char *envp[] =
{
"PATH=$PATH:/usr/wireshark/bin",
"LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib32",
0
};
execve(args[0], &args[0], envp);
fprintf(stderr, "Oops!\n");
return -1;
}
【问题讨论】:
-
请详细说明
did not work -
重定向不起作用,它由 shell 处理,而不是应用程序本身,
exec系列函数不会启动 shell,除非你要求它运行,例如"/bin/sh". -
execve 正在生成 tshark,但 tshark 退出时出现错误“tshark:使用“-f”和其他命令行参数指定了捕获过滤器。”
-
/usr/ws/bin/tshark -i /tmp/ts_pipe -f /tmp/output.pcap -f "not src host 1.1.1.1" 2> /tmp/error.log - 这个命令提示符 (bash) 中的命令有效。