첫 번째 과제가 도래했다.
일단 이 수업은 교수님이 만들어 주신 가상 서버에서 실습을 진행한다.
모든 실습은 내 계정의 하위 폴더인 Projects
라는 폴더에서 진행한다.
첫 번째 과제는 test.txt 파일을 읽어서 파일 내용을 출력하는 프로그램을 만들고, 해당 프로그램의 소스 코드(read.c)를 제출하는 것이다.
touch test.txt
echo "Hello world!" > test.txt
cat test.txt
vim read.c
#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;
}
esc
로 명령 모드에 진입 후 :w
로 파일 저장vim
으로 파일을 열었기 때문에 저장해야 파일이 최종적으로 생성됨)gcc read.c -o read
./read
아까 작성했던 test.txt 파일의 내용이 정상적으로 출력되는 것을 확인할 수 있다.
서버에서 작성한 코드를 원격으로 로컬에 복사해서 가져와야 한다.
scp -P 2022 pu2rile@서버 주소:/home/pu2rile/Projects/read.c .
putty가 아닌 터미널에서 명령어 입력
서버 계정의 비밀 번호를 입력하면 지정한 경로에 성공적으로 복사된다.
끝.