当前位置:  技术问答>linux和unix

关于用popen调用mplayer的问题,读不出命令的输出流

    来源: 互联网  发布时间:2016-10-13

    本文导语:  本帖最后由 yeni_1116 于 2010-11-04 17:51:31 编辑 问题背景是这样的,我创建了一个管道 /tmp/cmd,用来对slave模式工作的Mplayer进行控制和信息获取。 主要代码如下: FILE* mp; char buf[1000]; float timepos; mp = popen("/nand1/mplayer/mpl...

本帖最后由 yeni_1116 于 2010-11-04 17:51:31 编辑
问题背景是这样的,我创建了一个管道 /tmp/cmd,用来对slave模式工作的Mplayer进行控制和信息获取。
主要代码如下:
FILE* mp;
char buf[1000];
float timepos;

mp = popen("/nand1/mplayer/mplayer -cache 1024 -quiet -slave -input file=/tmp/cmd ************.mp4 &","r");
sleep(30);
system("echo get_time_posn > /tmp/cmd");
fgets(buf, 1000, mp);
printf("the buf shows (%s)n",buf);

现在的问题是这样的:
用这个代码运行后 打印结果是:the buf shows (
)
貌似没有结果,但好像有个换行?不知道是不是

然后如果我在命令行直接调用:
#/nand1/mplayer/mplayer -cache 1024 -quiet -slave -input file=/tmp/cmd ************.mp4 &
等视频播起来以后再在命令行输获取当前时间的命令
#echo get_time_pos > /tmp/cmd
# ANS_TIME_POSITION=11.5  (打印出来的语句)

此时 可以看到会打印正确的当前时间,注意上面这个命令echo get_time_pos > /tmp/cmd 和代码里面的system("echo get_time_posn > /tmp/cmd");差一个换行符,为神马会是这样呢,这里就是我迷惑的地方了,如果在命令行直接输命令时有换行符,也就是说如果这样:
#echo get_time_posn > /tmp/cmd   那么这时候命令行不会打印任何东西,也就是说不能获取到当前时间
而在代码里面,如果把换行符去掉,也就是变成system("echo get_time_pos > /tmp/cmd")的话,那么当执行到这一句的时候mplayer就会死掉,打印如下信息:
MPlayer interrupted by signal 13 in module: key_events
- MPlayer crashed. This shouldn't happen.
  It can be a bug in the MPlayer code _or_ in your drivers _or_ in your
  gcc version. If you think it's MPlayer's fault, please read
  DOCS/HTML/en/bugreports.html and follow the instructions there. We can't and
  won't help unless you provide this information when reporting a possible bug.

后来查看一些mplayer的帮助文档时,好像有这么个意思:“因为Mplayer是通过换行符("n")来分隔不同的命令,所以我们在编程中不管是写入到管道文件还是写入到QT的进程中在命令后面一定要加入换行符("n"),这样Mplayer才能辨别。”

现在问题就是 按照在命令行的时候好像应该是要把换行符去掉才可以得到正确的信息,而如果在代码里面不加换行符的话却会死,而如果加了的话就什么也不打印,也好像就跟在命令行直接输命令时加了换行符一样的效果。

现在不知道怎么回事了,有没有各位大侠懂的指点指点~~

|
前几天有一个mplayer相关的帖子
好像mplayer执行时会读取标准输入,后台执行时导致问题

记得是重定向了标准输入
mplayer ... 

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • popen函数无法执行cd命令
  • 请教关于popen()命令!
  • popen()里的command是个脚本,里面定义了function,在运行时,报错sh:"}"非期望的.看popen帮助,它execl不一定就用ksh,如何设环境是她能用ksh
  • popen()函数的问题
  • 谁能告之popen函数的BUG?
  • 关于popen函数使用的问题
  • 请教cgi程序不能使用popen的问题
  • popen和system的问题
  • 用popen,不能使用fseek了?Segmentation fault错误
  • POPEN后如何知道哪个是父进程执行的结果
  • fd = popen(command, "r")怎么获取fd长度啊
  • popen得小问题。
  • 关于popen
  • popen()函数的使用
  • 如何linux 程序中启用其他进程,非阻塞,非popen
  • popen 函数。。。
  • popen/pclose: too many open files
  • popen 用法中:an exit status of 127 ?
  • 关键字:UNIX C POPEN FILE
  • Linux系统中popen函数的缺陷与改造方案 ---谁有这篇文章?
  • C++ 中有没有类似的 popen
  • 请问popen函数据第二个参数const char *type设为“w”是什么意思,man写的太简单了不明白?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3