본문 바로가기

Programming/Linux_Platform

file open 시 fd 번호 부여 방식

하나의 process 에서 한 파일을 연속으로 open 할때 fd number 부여 방식


- 이전에 3 이라는 fd 숫자를 써서 open 하고 close 를 함.

- 다음 open 때는 fd 로 3이 부여 된다.

- 따라서 file close 이후에는 항상 fd 에 -1 을 저장하는 것이 중요함.


test code

#include <stdio.h>

//#include <sys/mount.h>

#include <signal.h>

#include <stdlib.h>

#include <unistd.h>

#include <errno.h>

#include <sys/wait.h>

#include <fcntl.h>         // O_WRONLY

#include <string.h>        // strlen()


#define  BUFF_SIZE   1024


int main()

{

   char   buff_r[BUFF_SIZE], buff_w[BUFF_SIZE];

   int    fd[10];

int rst;

int fd_num;


for(int i=0 ; i<10 ; i++) {

if ( 0 >= ( fd[i] = open( "./test.txt", O_RDONLY)))

{

printf( "fail to open file fd[%d]!!\n", i);

return 0;

}

if(i==0)

close( fd[0]); // 미리 닫는다. 이로써 fd[0] 와 fd[1] 은 같은 fd number 를 갖는다.

}



for(int i=0 ; i<10 ; i++) {

printf("fd[%d]=%d\n", i, fd[i]);

}


close( fd[0]); // 3이 부여된 fd[0] 를 중복 close 함으로써 fd[1] 이 close 된다.


fd_num = 1;

if(0 > (rst =read( fd[fd_num], buff_r, BUFF_SIZE))) {

printf( "fail to read file fd[%d]!!\n", fd_num);

}

puts( buff_r);

close( fd[fd_num]);



read( fd[2], buff_w, BUFF_SIZE);

puts( buff_w);

close( fd[2]);

   

   return 0;

}


출력결과

fd[0]=3

fd[1]=3

fd[2]=4

fd[3]=5

fd[4]=6

fd[5]=7

fd[6]=8

fd[7]=9

fd[8]=10

fd[9]=11

fail to read file fd[1]!!


onegun hello