2017-11-12 7 views
-2

システムコール(Linux用)をC言語で使用して端末からテキストを読み込み、最後の6行を出力する必要があります)。それ、どうやったら出来るの?ファイルが6行よりも小さい場合は、ファイル全体を出力する必要があります。出力は書き込みでなければなりません。システムコールを使用してtfrom端末を読み取り、入力の最後の6行を出力する

サンプル入力:

1 
2 
344444 
44444 
555555555555555555555555555555555555 
6 
7 
8 
9 
100000 
11 

OUTPUT:

6 
7 
8 
9 
100000 
11 

使用して読み取る()、DUP()&近い()は私の問題を修正しました。

+1

いくつかのサンプル入力と出力を提供できますか? "端末から何らかのテキストを読んでください" – achal

+0

@achalはそれを追加しました –

+1

あなたのOSを定義してください。定義上、システムコールはOS特有のものです。 Linuxの場合は、[syscalls(2)](http://man7.org/linux/man-pages/man2/syscalls.2.html)を参照してください。そして、バッファリングする必要があります(C標準ライブラリのように) –

答えて

1

read()、dup()のような基本的なシステムコールについて学ぶ& close()。 &を開いて、これらのシステムコールがどのように動作しているかを確認してください。ファイルに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; 
} 
1

どのように:while(read(STDIN_FILENO、& ch、1)> 0)? とし、出力をバッファに格納し、いくつかの区切り文字で行を操作してから、配列を後ろに移動することができます。

+0

getcharは使用できません。システム関数のみです。 –

関連する問題