我正在尝试在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);
}
非常简单,但我不知道如何处理传递给应用程序的文件以允许它获取文件名并修改命令。
答案 0 :(得分:1)
您需要使用传递给main()
函数的参数。将函数的签名更改为:
int main(int argc, char *argv[])
然后遍历argv[]
中的字符串指针,这将是您的程序的命令行参数。
答案 1 :(得分:1)
(首先,让我对strcpy()
发表评论:原样,对strcpy()
的调用是多余的(并且存在安全问题),因为你使用的是常量字符串。你可以写了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执行。