主题 : minimad.c问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 5271
精华: 0
发帖: 30
金钱: 300 两
威望: 225 点
综合积分: 60 分
注册时间: 2009-04-16
最后登录: 2010-09-09
楼主  发表于: 2009-11-26 21:23

 minimad.c问题

我今天阅读libmad自带的minimad的时候读到开始就糊涂了。
那段代码是这样得

int main(int argc, char *argv[])
{
  struct stat stat;
  void *fdm;

  if (argc != 1)
    return 1;


在这个if中判断输入参数,当不为1的时候就返回1,意思不就是退出程序了吗,可这个是媒体播放的输入指令的时候肯定会附带参数,附带了参数那么argc就是2了,他到底是什么意思。
级别: 新手上路
UID: 5271
精华: 0
发帖: 30
金钱: 300 两
威望: 225 点
综合积分: 60 分
注册时间: 2009-04-16
最后登录: 2010-09-09
1楼  发表于: 2009-11-27 12:33
   谁能指教一下,又找了一上午还是不知道原因,网上很多示例程序都这么写。
级别: 新手上路
UID: 5271
精华: 0
发帖: 30
金钱: 300 两
威望: 225 点
综合积分: 60 分
注册时间: 2009-04-16
最后登录: 2010-09-09
2楼  发表于: 2009-11-27 13:13
突然发现这个程序在执行的时候不是./minimad music.mp3这样执行
而是 ./minimad <music.mp3这样执行,而且在这个时候提示argc这个参数为1,并且这个时候
  if (fstat(STDIN_FILENO, &stat) == -1 ||
      stat.st_size == 0)
    return 2;
这一句也不再返回了。
看来是<这个符号的问题了。

在网上找到说’<‘为 重定向输入符号
用法:命令 <filename
结果:stdin被文件"filename"所代替.
作用:从当前开始, 后边的输入就都来自于“filename”文件了, 而不是标准输入了(通常都是键盘输入). 这样就提供了一种按行读取文件的方法, 并且可以使用sed 和/或 awk来对每一行进行分析.


linux太复杂了,不读这段程序到死也不知道还有这个东西。
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
3楼  发表于: 2009-11-27 13:16

 回 2楼(liuyan546) 的帖子

不读源代码你永远不能真正掌握Linux
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."