`
pipal
  • 浏览: 165860 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

模仿tac命令

阅读更多

以前逛兰大开源社区,看到一模仿Linux/Unix下tac命令的文章,感觉思路挺不错,代码实现如下:

 

/*
 *First ,read one ,then push this line to the stack
 *Then ,read the next line
 *Until read to the end
 *At last pop the data from stack
 */
#include <stdio.h>
#include <error.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>

#define MAXLINE 8192

struct stacklink
{
	char *linebuf;
	struct stacklink *next;
};

struct stacklink *head;

//push the line data to the stack
void creatstack(struct stacklink * buf)
{
	if(head->next==NULL){
		head->next=buf;
		buf->next=NULL;
	}
	else{
		buf->next=head->next;
		head->next=buf;
	}
}

//pop the data ,and print the result
void tacshow()
{
	struct stacklink *tmp;
	tmp=head->next;
	if(head->next!=NULL)
	while(tmp!=NULL)
	{
		printf("%s",tmp->linebuf);
		tmp=tmp->next;
	}
}

int main(int argc,char *argv[])
{
	FILE *fp;
	struct stacklink *buf;
	char ch,tmp_array[MAXLINE];
	int i;
	head=malloc(sizeof(struct stacklink));
	size_t n;
	/*
	 *this is only aupport one parameters
	 *It can easily support for more than one parameters
	 *Such as:
	 *put the below codes to "for" loop,and read the filename argv[i] will
	 *be ok!
	 */
	if(argc!=2)
	{
		perror("Please input the file's name\n");
	}
	if((fp=fopen(argv[1],"rb"))==NULL)
	{
		perror("open error\n");
	}
	buf=malloc(sizeof(struct stacklink));
	buf->linebuf=NULL;
	while((getline(&buf->linebuf,&n,fp))!=EOF){
		creatstack(buf);
		buf=malloc(sizeof(struct stacklink));
	}
	fclose(fp);
	tacshow();
	free(head);
	free(buf);
	return 0;
}


 

分享到:
评论

相关推荐

    Linux基础课件Linux系统文件内容查看tac命令共9

    【标题】"Linux基础课件Linux系统文件内容查看tac命令共9"主要涉及的是Linux操作系统中的一个基础命令——`tac`,它是用于查看和操作文件内容的工具。这个命令在Linux系统学习中是非常基础且实用的部分,尤其是在...

    Linux基础课件-Linux系统文件内容查看-tac命令.pptx

    在Linux操作系统中,掌握基本的命令行工具是至关重要的,其中`tac`命令就是这样一个实用的工具。它主要用于反向显示文件的内容,这在处理大量数据或者需要从底部向上查看文件时非常有用。本课件将深入讲解`tac`命令...

    tac命令 反向列示文件内容

    tac命令就是将文件反向输出,刚好和cat输出相反。 语法格式:tac [参数] [文件] 常用参数: -b 在行前而非行尾添加分隔标志 -r 将分隔标志视作正则表达式来解析 -s 使用指定字符串代替换行作为分隔标志 ...

    Linux tac命令的实现示例

    Linux中的`tac`命令是一个非常实用的工具,它在处理文本文件时提供了反向输出的功能。这个命令的名字`tac`实际上是`cat`的反向拼写,暗示了它的功能是反向显示文件内容。在本篇文章中,我们将深入探讨`tac`命令的...

    一天一个shell命令 linux文本操作系列-tac,rev命令详解

    tac命令用于将文件已行为单位的反序输出,即第一行最后显示,最后一行先显示。 语法 tac(选项)(参数) 选项 -a或——append:将内容追加到文件的末尾; -i或——ignore-interrupts:忽略中断信号。 参数 文件列表:...

    TAC的学习资料

    根据提供的文档内容,我们可以深入探讨TAC语言及其与SQL语言的结合使用,这对于理解南北7.0软件的核心功能至关重要。 ### TAC语言简介 TAC是南北7.0软件内置的一种开发语言,它具备强大的二次开发能力。TAC语言的...

    2G3G LAC与4G5G TAC的协同优化.docx

    "2G3G LAC与4G5G TAC的协同优化" 随着移动通信网络的发展,4G TAC 和 2G/3G LAC 的不一致及插花的问题日益突出,这些问题会导致移动终端跨 TAC 重选和切换次数增多,影响网络质量和用户体验。因此,需要开展 TAC/...

    tac_plus配置文件

    tac_plus的参考配置文件

    tac_plus安装文件

    tac_plus安装文件

    Linux查看文件内容命令.pdf

    tac 命令是 cat 命令的逆向版本,它可以从文件的最后一行开始显示内容。tac 命令的基本语法为:`tac [文件名]`。例如,`tac ~/.bashrc` 将从 `.bashrc` 文件的最后一行开始显示内容。 3. more 命令 more 命令可以...

    5G基站间跨TAC切换失败.docx

    5G基站间跨TAC切换失败案例分析 本资源摘要信息将对5G基站间跨TAC切换失败案例进行详细分析,探讨该问题的原因、解决方案和效果评估,并对类似案例提供解决方法和流程建议。 一、问题背景 随着5G网络的普及,基站...

    TAC详细案例介绍.pdf

    ### TAC Vista与TAC Xenta系统集成案例 #### 一、TAC Vista系统概述 - **定义与功能:**TAC Vista是一种高级楼宇自动化控制系统,用于管理和控制建筑内的各种系统,如暖通空调(HVAC)、照明和安防等。 - **特点:...

    TAC Vista 软件详细技术手册.pdf

    软件由几个主要部分组成,包括TAC Vista Server、TAC Vista Workstation、TAC Vista Webstation和TAC Vista ScreenMate等,它们共同构成了一个功能全面的系统,可实现对建筑物环境的综合管理。 2. TAC Vista Server...

    Tacacs+服务器安装,tac plus服务器安装

    Tacacs+服务器的配置文件通常位于/usr/local/etc/tac_plus.cfg。可以从源码包中复制配置文件,存放位置可以自定义。 2. 访问日志和记账日志 Tacacs+服务器需要配置访问日志和记账日志存放目录。可以使用mkdir命令...

    终端TAC型号20120405

    手机 tac imei ,很多app借口需要imei参数,可用于生成imei

    DCCE-TAC6000、TAC3000、TAM4000设置软件.rar

    《DCCE-TAC6000、TAC3000、TAM4000设备设置软件详解》 在IT行业中,设备的配置与管理是至关重要的环节,特别是对于DCCE-TAC6000、TAC3000以及TAM4000这类高端的通信和网络设备。这些设备广泛应用于企业网络、数据...

    利用Mapinfo自带Voronoi功能制作TAC、LAC、BSC边界线

    ### 使用Mapinfo 10.0的Voronoi功能创建TAC、LAC、BSC边界线 在无线网络优化领域,对特定区域内的基站进行有效的管理与分析至关重要。其中,利用地理信息系统(GIS)软件Mapinfo的强大功能,能够帮助我们高效地处理...

Global site tag (gtag.js) - Google Analytics