我怎样才能为Linux实用尾部的源代码?(How can I get the source code

2019-07-18 09:23发布

这个命令是非常非常有用的,但在那里我可以得到源代码,看看里面是什么回事。

谢谢 。

Answer 1:

尾部效用是Linux上的coreutils的一部分。

  • 源码包: ftp://ftp.gnu.org/gnu/coreutils/coreutils-7.4.tar.gz
  • 源文件: http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/tail.c

我一直认为FreeBSD系统具有比GNU工具更加清晰的源代码。 因此,这里的tail.c在FreeBSD项目:

  • http://svnweb.freebsd.org/csrg/usr.bin/tail/tail.c?view=markup


Answer 2:

闲逛uClinux的网站。 由于他们分发的软件,他们需要使源提供一个这样或那样的。

或者,你可以阅读man fseek它会怎么做和猜测。

NB--见威廉的评论下面,有些时候你不能使用求。



Answer 3:

您可能会发现一个有趣的练习写自己的。 绝大多数的Unix命令行工具是网页左右的相当简单的C代码。

只是看看代码,采用GNU的coreutils源轻松gnu.org或您喜爱的Linux镜像站点找到。



Answer 4:

/`*This example implements the option n of tail command.*/`

    #define _FILE_OFFSET_BITS 64
    #include <stdio.h>
    #include <stdlib.h>
    #include <fcntl.h>
    #include <errno.h>
    #include <unistd.h>
    #include <getopt.h>

    #define BUFF_SIZE 4096

    FILE *openFile(const char *filePath)
    {
      FILE *file;
      file= fopen(filePath, "r");
      if(file == NULL)
      {
        fprintf(stderr,"Error opening file: %s\n",filePath);
        exit(errno);
      }
      return(file);
    }

    void printLine(FILE *file, off_t startline)
    {
      int fd;
      fd= fileno(file);
      int nread;
      char buffer[BUFF_SIZE];
      lseek(fd,(startline + 1),SEEK_SET);
      while((nread= read(fd,buffer,BUFF_SIZE)) > 0)
      {
        write(STDOUT_FILENO, buffer, nread);
      }
    }

    void walkFile(FILE *file, long nlines)
    {
      off_t fposition;
      fseek(file,0,SEEK_END);
      fposition= ftell(file);
      off_t index= fposition;
      off_t end= fposition;
      long countlines= 0;
      char cbyte;

      for(index; index >= 0; index --)
      {
        cbyte= fgetc(file);
        if (cbyte == '\n' && (end - index) > 1)
        {
          countlines ++;
          if(countlines == nlines)
          {
        break;
          }
         }
        fposition--;
        fseek(file,fposition,SEEK_SET);
      }
      printLine(file, fposition);
      fclose(file);
    }

    int main(int argc, char *argv[])
    {
      FILE *file;
      file= openFile(argv[2]);
      walkFile(file, atol(argv[1]));
      return 0;
    }

    /*Note: take in mind that i not wrote code to parse input options and arguments, neither code to check if the lines number argument is really a number.*/


文章来源: How can I get the source code for the linux utility tail?