这个命令不会使用,上网搜索一下,大致用法
./fold -b 20 touch.c
把文件按每行20个字节进行显示
./fold -w 20 touch.c
大概也是这样子。
好象是可以分栏打印,没弄明白。
读代码,其中
adjust_column()
大概是处理其中中\b \t \r等特殊字符,但处理方法有些不明白。
fold_file是主要的函数,主要处理都在这里。
先从main开始
先从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
我特意加了两句打印语种,程序进入这个循环才晓得,看来,读程序时,调试太重要,光想,太麻烦了。
而且作者加了注释。
是我太笨了啊。
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函数
处理好选项就,就调用fold_file函数
用一个大循环
while ((c = getc (istream)) != EOF)
{
如果当前字符是回车,就输出
如果大于宽度
while ((c = getc (istream)) != EOF)
{
如果当前字符是回车,就输出
如果大于宽度
}
其中大于宽度的处理看明白。在些不好看。先略过。
其中大于宽度的处理看明白。在些不好看。先略过。