gnu coreutils-4.5.1 fold.c代码分析


这个命令不会使用,上网搜索一下,大致用法
./fold -b 20 touch.c
把文件按每行20个字节进行显示
./fold -w 20 touch.c
大概也是这样子。
好象是可以分栏打印,没弄明白。
读代码,其中
adjust_column()
大概是处理其中中\b \t \r等特殊字符,但处理方法有些不明白。
fold_file是主要的函数,主要处理都在这里。
先从main开始
  /* Turn any numeric options into -w options.  */
  for (i = 1; i < argc; i++)
    {
      char const *a = argv[i];
      if (a[0] == '-')
 {
   if (a[1] == '-' && ! a[2])
     break;
   if (ISDIGIT (a[1]))
     {
       char *s = xmalloc (strlen (a) + 2);
       s[0] = '-';
       s[1] = 'w';
       strcpy (s + 2, a + 1);
       argv[i] = s;
       if (200112 <= posix2_version ())
  {
    error (0, 0, _("`%s' option is obsolete; use `%s'"), a, s);
    usage (EXIT_FAILURE);
  }
     }
 }
    }
这段程序很有意思,我有了先入之见,总想,选项不是
-w 30
这样分开写的吗?怎么会-30呢?
后来,想明白了,作者是要把
-30
变成
-w30
我特意加了两句打印语种,程序进入这个循环才晓得,看来,读程序时,调试太重要,光想,太麻烦了。
而且作者加了注释。
是我太笨了啊。
再就是getopt_long处理选项了。
处理好选项就,就调用fold_file函数
用一个大循环
  while ((c = getc (istream)) != EOF)
    {
 如果当前字符是回车,就输出
 如果大于宽度
 
    }
其中大于宽度的处理看明白。在些不好看。先略过。

猜你喜欢

转载自blog.csdn.net/woshiyilitongdouzi/article/details/80314489