0

我正在尝试用 C 语言编写一个小程序,该程序将打开一个文件,然后在终端中运行文件名以将文件流式传输到我的 Apple TV。

我想这样做的原因是我可以右键单击媒体文件,选择“打开方式”,从列表中选择“Apple TV”,然后通过气流程序将其流式传输到我的 Apple TV。

到目前为止,我的代码如下

#include <stdio.h>
#include <string.h>

int main ()
{
   char command[50];

   strcpy( command, "airstream '/home/steve/media.mp4' -o 192.168.0.2" );
   system(command);

   return(0);
}

非常简单,但我不确定如何处理传递给应用程序的文件以允许它获取文件名并修改命令。

4

2 回答 2

1

您需要使用传递给main()函数的参数。将函数的签名更改为:

int main(int argc, char *argv[])

然后遍历 中的字符串指针argv[],这将是你的程序给出的命令行参数。

于 2013-10-23T15:05:51.507 回答
1

(首先,让我评论一下strcpy():按原样,调用 tostrcpy()是多余的(并且会带来安全问题),因为您使用的是常量字符串。您可以改写system("airstream '/home/steve/media.mp4' -o 192.168.0.2")。)

如果你想构造一个给定文件名的命令,理论上你可以写

char command[LINE_MAX];
snprintf(command, sizeof command, "some_command %s", argv[1]);
system(command);

但这又引发了一个安全问题,因为现在您的程序可以被劫持以执行任意外部程序,方法是向其传递格式错误的命令行参数,类似于 SQL 注入攻击。

您最好找到airstream可执行文件使用的库/API,并将其直接合并到您的程序中。如果不存在这样的东西,您必须确保在将其交给 shell 执行之前至少验证用户输入(即转义特殊字符等)。

于 2013-10-23T15:10:52.110 回答