#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#define BUF_SIZE 256
void handle_error(char *);
int main(void)
{
int fd;
char message[] = "Hello world network programming.";
char buf[BUF_SIZE];
fd = open("data.txt", O_CREAT|O_WRONLY|O_TRUNC, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);
if(fd < 0)
handle_error("open() error.");
printf("file descriptor: %d \n", fd);
printf("sizeof(message): %zu\n", sizeof(message));
if(write(fd, message, sizeof(message)) < 0)
handle_error("write() error.");
printf("Data written: %s\n", message);
close(fd);
fd = open("data.txt", O_RDONLY);
if(fd < 0)
handle_error("open() error.");
if(read(fd, buf, sizeof(buf)) < 0)
handle_error("read() error.");
printf("Data read: %s\n", buf);
close(fd);
printf("sizeof(short): %zu\n", sizeof(short));
printf("sizeof(int): %zu\n", sizeof(int));
printf("sizeof(long): %zu\n", sizeof(long));
printf("sizeof(long long): %zu\n", sizeof(long long));
printf("sizeof(size_t): %zu\n", sizeof(size_t));
printf("sizeof(ssize_t): %zu\n", sizeof(ssize_t));
return 0;
}
void handle_error(char *message)
{
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
코드 먼저 살펴보겠습니다
헤더 파일에서 특이한점은 fcntl.h 헤더인데요, 이는 파일제어 및 파일 열기 플래그에 사용되는 내용을 포함하는 헤더입니다. 또한 버퍼 사이즈를 정의한 내용도 포함합니다.
파일 작업에 사용할 파일 디스크립터 변수, 문자열 한 개와 파일에서 읽은 데이터를 저장할 퍼버 변수를 정의합니다.
Open 함수를 이용하여 실제 파일디스크립터를 할당합니다.
살펴보아야 할점은 첫번째 인자로는 파일이름을 문자열로 전달하고, 그 후에 다양한 옵션을 설정할 수 있다는 점입니다.
옵션은 소유자, 그룹, 타인 에 대한 rwx(read write delete)권한등을 설정하거나
파일이 없을 경우 생성, 쓰기전용, 내용 비우기등을 옵션으로 줄 수 있습니다.
파일 디스크립터를 생성후, 할당받은 파일 디스크립터 번호를 출력하고, 위에서 설정한 메시지 배열의 크기를 출력합니다.
그리고 write메소드를 이용해서 실제 파일에 message의 내용을 작성하며, 이 작성한 내용을 출력합니다.
과정을 완료 후, 사용한 파일 디스크립터는 종료합니다.
이제 파일을 읽어볼 차례입니다. O_RDONLY 옵션을 줘 data.txt 파일을 읽기전용으로 open합니다
Read에 파일 디스크립터와 내용을 읽을 버퍼, 버퍼사이즈를 지정해주어 buf에 파일의 내용을 저장합니다.
문제가 발생하지 않을 경우 파일의 내용을 복사한 버퍼의 내용을 출력하고 파일디스크립터를 종료시킵니다.
아래의 내용들은자료형의 크기를 출력해줍니다.
컴파일 후 file_operation을 실행한 결과입니다.
파일 디스크립터는 3번으로 할당되었고, 메시지의 사이즈는 33입니다.
파일생성 옵션을 준 채로 실행하였기 때문에 data.txt가 생성된 후, 메시지로 설정한 내용을 작성한 모습을 살펴볼 수 있습니다.
또한 생성한 data.txt파일을 열어 내용을 버퍼에 읽은 후 잘 출력된 모습도 확인 할 수있습니다.
'프로그래밍 > 2024 네트워크 프로그래밍' 카테고리의 다른 글
6. Address conversion (0) | 2025.01.06 |
---|---|
5. inet_addr 살펴보기 (0) | 2025.01.06 |
4. 빅 엔디안, 리틀 엔디안 (0) | 2025.01.06 |
3. c에서의 파일복사 (0) | 2025.01.03 |
1. 기초 소켓 통신 살펴보기 (0) | 2025.01.03 |