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

自己寫的tail,感覺實現有問題,大家幫忙看看

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

    本文导语:  自己寫了個tail命令,用法:tail line_numbers file_name,但是感覺實現有很多問題,請各位指教。 #include  #include  #include  #include  #include  void tail(int fd,int nline); int main(int argc,char *argv[]) { int line; char *fname; int ...

自己寫了個tail命令,用法:tail line_numbers file_name,但是感覺實現有很多問題,請各位指教。

#include 
#include 
#include 
#include 
#include 

void tail(int fd,int nline);

int main(int argc,char *argv[])
{
int line;
char *fname;
int fd;

if(argc!=3)
{
exit(1);
}

line=atoi(argv[1]);
fname=argv[2];

if((fd=open(fname,O_RDONLY))==0)
{
perror(NULL);
exit(1);
}
tail(fd,line);
return 0;
}

void tail(int fd,int nline)
{
char buf[100]={0};
long n=0;
nline++;
while(lseek(fd,n,SEEK_END) && nline)
{
read(fd,buf,1);
if(!strcmp(buf,"n"))
nline--;
n--;
}
n+=2; /*read postion is before "n", add 2 to skip to the next line's start */
lseek(fd,n,SEEK_END);
while(read(fd,buf,1))
write(1,buf,1);
}

|
程序功能上没什么问题啊,不知道你指的问题是什么
如果要细化肯定还有要考虑的很多问题,下面是我的一部分代码:


/* tail1.c 
* version 0.1         unbufferd 
* function            to read the last n  lines 
* note                it doesn't work with stdin 
*usage                tail  n_lines filename 
*/


#include                 
#include                
#include                


int       main (int argc , char * argv[])
{
        int                fp,n_lines;
        void             tail(int fp , int n_lines);
        if ( argc !=3 )
        {
                fprintf(stderr , " Usage : %s n_lines finlname " , *argv );
                exit ( 1 );
        }
        if ( ( fp = open ( argv[2] , O_RDONLY ) ) == -1 )
        {
                perror ( argv [2] );
                exit ( 2 );
        }
        n_lines = atoi ( argv[1] );
        tail ( fp , n_lines );
        close ( fp );
        return 0;
}

void          tail ( int fp , int n_lines )
{

          char            c ;
          int                   prt_lines; 
          long            from0 , fromend,lseek () ;

          prt_lines = 0 ;
          fromend = -1L ;
          while ( prt_lines = 0 )
                )
          {
                  if ( read ( fp , &c , 1 ) != 1 ) 
                  { 
                          perror ( " tail " ) ;
                          exit ( 2 ) ;
                  }
                  if ( c == 'n' )          /*if use c = 'n ' it will print the last n_lines words */
                          prt_lines++;
                          fromend--;
          }
         if ( from0  文件实际行数)

可能这些对新手都不会去想它,但是真正想进入软件行业,你就必须得开始考虑了。

|
学习了

c对linux sa也是必须要掌握的,学习

|
不错。鼓励下

    
 
 

您可能感兴趣的文章:

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












  • 相关文章推荐
  • tail跟踪一个进程后,怎么停止跟踪? ^Z强制结束后,tail进程还是有,要kill掉
  • tail -f run.log 导致 tail: run.log: file truncated
  • 关于tail的问题
  • tail使用
  • 图形化tail工具 SwingTail
  • Linux命令:tail -f 怎么暂停,怎么退出?
  • 请问如何中止命令 tail -f 文件名
  • Debian linux中tail与cat有什么区别
  • tail问题
  • 请问在Linux下的Tail工具工作原理?
  • 写一个tail程序,能够打印出命令行指定的文件的最后十行,
  • spi_message_add_tail(……)功能,请帮忙详细说明一下,非常感谢
  • tail -f是如何实现的啊?源代码在哪个目录啊?
  • 请教cat tail命令,小弟我是新手
  • 我通过C程序执行tail -f printlog(printlog为日志名),想要动态获取里面新进来的日志,怎么办?
  • 使用C#开源文件实时监控工具Tail&TailUI介绍


  • 站内导航:


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

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

    浙ICP备11055608号-3