我必须在终端中读取一些文本,只使用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()解决了我的问题。
答案 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;
}