使用系统调用读取tfrom终端并输出最后6行输入

时间:2017-11-12 08:46:47

标签: c operating-system system-calls tail

我必须在终端中读取一些文本,只使用C语言中的系统调用(对于Linux),然后输出最后6行(就像linux中的tail命令一样)。我怎么做?如果文件小于6行,则应输出整个文件。输出应该是写入。

示例输入:

6
7
8
9
100000
11

输出:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();

    services.AddAuthorization(options =>
    {
        options.AddPolicy("name1",  policy => policy.....);
    });
}

使用read(),dup()& close()解决了我的问题。

2 个答案:

答案 0 :(得分:1)

如何:while(读取(STDIN_FILENO,& ch,1)> 0)作为开始? 并且你可以将输出存储在缓冲区中并用一些分隔符操纵这些行,然后在数组上向后移动。

答案 1 :(得分:1)

了解基本的系统调用,如read(),dup()&关()。打开手册页&检查这些系统调用是如何工作的。我发布了我的代码,考虑到文件中只有10个没有,你可以使它通用。

#include<stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main(int argc, char * argv[])
{
        int a[10],i,n;
        n= sizeof(a)/ sizeof(a[0]);
        int fd ;
        close(0);// close STDIN so that scanf will read from file
        fd=open(argv[1],O_RDWR | 0664);
        if(fd==-1)
        {
                perror("open");
                return 0;
        }

        for(i=0;i<n;i++)
                scanf("%d",&a[i]);


        //print only last 6.. I added random 6 you can take input from user input 
        for(i=n-1;i>n-6;i--)
                printf("%d\n",a[i]);

        return 0;
}