2017-11-12 14 views
-2

C에서 시스템 호출 (Linux의 경우) 만 사용하여 터미널에서 일부 텍스트를 읽은 다음 마지막 6 줄을 출력해야합니다 (Linux의 tail 명령처럼).). 어떻게해야합니까? 파일이 6 줄보다 작 으면 전체 파일을 출력해야합니다. 출력은 쓰기로 이루어져야합니다.시스템 호출을 사용하여 tfrom 터미널을 읽고 입력의 마지막 6 줄을 출력하십시오.

샘플 입력 :

1 
2 
344444 
44444 
555555555555555555555555555555555555 
6 
7 
8 
9 
100000 
11 

출력 :

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

방법 : 시작 (읽지 않음 (STDIN_FILENO, & 채널, 1)> 0)? 이고 버퍼에 출력을 저장하고 일부 구분 기호로 행을 조작 한 다음 배열에서 뒤로 이동할 수 있습니다.

+0

시스템 기능인 getchar을 사용할 수 없습니다. –