관리 메뉴

Value Creator의 IT(프로그래밍 / 전자제품)

Chapter 1_2 리눅스 기반 파일 조작하기(파일 디스크립터) 본문

1. 프로그래밍/4) Network

Chapter 1_2 리눅스 기반 파일 조작하기(파일 디스크립터)

valuecreatort 2019. 10. 29. 18:11
반응형

low_open.c

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>

void error_handling(char* message);

int main(void)
{
	int fd; //파일 디스크립터 선언
	char buf[]="Let's go!\n";//문자열 선언
	
	fd=open("data.txt", O_CREAT|O_WRONLY|O_TRUNC);//data.txt라는 파일생성, 쓰기only
	if(fd==-1) //읽기 에러 표시
		error_handling("open() error!");
	printf("file descriptor: %d \n", fd); //파일디스크립터 번호 출력

	if(write(fd, buf, sizeof(buf))==-1) //쓰기 에러 표시
		error_handling("write() error!");

	close(fd); //닫기
	return 0;
}

void error_handling(char* message) //에러를 표시하고, exit를 통해 프로그램 빠져나온다.
{
	fputs(message, stderr);
	fputc('\n', stderr);
	exit(1);
}

//아래는 우분투 터미널 상에서 명령어 입력 방법
/*
root@com:/home/swyoon/tcpip# gcc low_open.c -o lopen
root@com:/home/swyoon/tcpip# ./lopen
file descriptor: 3 
root@com:/home/swyoon/tcpip# cat data.txt
Let's go!
root@com:/home/swyoon/tcpip# 
*/

 

 

low_read.c

 

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>

#define BUF_SIZE 100 // 버퍼 크기 설정 

void error_handling(char* message);

int main(void)
{
	int fd;
	char buf[BUF_SIZE]; //버퍼 크기 만큼의 문자열 생성 
	
	fd=open("data.txt", O_RDONLY); //읽기 전용으로 열기 
	if( fd==-1)
		error_handling("open() error!");
	
	printf("file descriptor: %d \n" , fd);
	
	if(read(fd, buf, sizeof(buf))==-1)
		error_handling("read() error!");

	printf("file data: %s", buf);
	
	close(fd);
	return 0;
}

void error_handling(char* message)
{
	fputs(message, stderr);
	fputc('\n', stderr);
	exit(1);
}

/*
root@com:/home/swyoon/tcpip# gcc low_read.c -o lread
root@com:/home/swyoon/tcpip# ./lread
file descriptor: 3 
file data: Let's go!
root@com:/home/swyoon/tcpip# 
*/

 

 

fd_seri.c

 

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/socket.h>

int main(void)
{	
	int fd1, fd2, fd3; //파일 디스크립터가 몇 번인지 표시한다. 
	fd1=socket(PF_INET, SOCK_STREAM, 0);  //소켓의 파일 디스크립터 번호는 3
	fd2=open("test.dat", O_CREAT|O_WRONLY|O_TRUNC); //파일 open의 파일 디스크립터는 4
	fd3=socket(PF_INET, SOCK_DGRAM, 0); //소켓의 파일 디스크립터는 5
	//결론 : 파일 디스크립터 0,1,2는 정해져 있고, 3번부터 순차적으로 배당해준다.
	//파일디스크립터 0번 : 표준 입력, 1번 : 표준 출력, 2번 
    
	printf("file descriptor 1: %d\n", fd1);
	printf("file descriptor 2: %d\n", fd2);
	printf("file descriptor 3: %d\n", fd3);
	
	close(fd1);
	close(fd2);
	close(fd3);
	return 0;
}

 

 

 

 

반응형
Comments