当前位置: 技术问答>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也是必须要掌握的,学习
c对linux sa也是必须要掌握的,学习
|
不错。鼓励下
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。