파일 내용 읽고 출력하는 프로그램

김도현 KimDohyun·2024년 10월 3일
0

첫 번째 과제가 도래했다.

일단 이 수업은 교수님이 만들어 주신 가상 서버에서 실습을 진행한다.

PuTTY로 접속

실습 폴더


모든 실습은 내 계정의 하위 폴더인 Projects 라는 폴더에서 진행한다.

첫 번째 과제는 test.txt 파일을 읽어서 파일 내용을 출력하는 프로그램을 만들고, 해당 프로그램의 소스 코드(read.c)를 제출하는 것이다.

파일 생성 및 내용 추가

  1. 파일 생성
touch test.txt
  1. 내용 추가
echo "Hello world!" > test.txt
  1. 내용 확인
cat test.txt

프로그램 코드 작성

  1. 파일 생성 및 편집
vim read.c
  1. 해당 파일에 코드 작성
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>	// read, write, close, STDOUT_FILENO 정의
#include <errno.h>	// errno, EINTR 정의

int main() {
	char file[] = "test.txt";
	int fd;

	fd = open(file, O_RDONLY);
	if (fd == -1) {
		perror("open");	// 파일이 열리지 않았을 때 오류 메시지 출력
		return 1;
	}

	ssize_t ret;
	char buf[1024];	// 1024 바이트 크기의 버퍼 설정
	ssize_t len = sizeof(buf);

	// 파일에서 읽은 데이터를 출력
	while ((ret = read(fd, buf, len)) > 0) {
		ssize_t write_ret;
		ssize_t write_len = ret;	// 읽은 길이만큼 쓰기
		char *write_buf = buf;
		
		while (write_len > 0) {
		       write_ret = write(STDOUT_FILENO, write_buf, write_len);	
			if (write_ret == -1) {
				if (errno == EINTR)
					continue;	// 인터럽트가 발생했을 경우 재시도
				perror ("write");
				close(fd);
				return 1;
			}

			write_len -= write_ret;
			write_buf += write_ret;
		}
	}
	if (ret == -1)
		perror("read");	// read 함수에서 에러가 발생했을 때 출력

	close(fd);
	return 0;

}
  1. esc 로 명령 모드에 진입 후 :w 로 파일 저장
    (vim 으로 파일을 열었기 때문에 저장해야 파일이 최종적으로 생성됨)

컴파일 및 실행

gcc read.c -o read
./read


아까 작성했던 test.txt 파일의 내용이 정상적으로 출력되는 것을 확인할 수 있다.

원격 파일 copy

서버에서 작성한 코드를 원격으로 로컬에 복사해서 가져와야 한다.

scp -P 2022 pu2rile@서버 주소:/home/pu2rile/Projects/read.c .

putty가 아닌 터미널에서 명령어 입력

서버 계정의 비밀 번호를 입력하면 지정한 경로에 성공적으로 복사된다.

끝.

0개의 댓글

관련 채용 정보