하나의 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
'Programming > Linux_Platform' 카테고리의 다른 글
get pid by process name - example source code (예제 코드) (0) | 2016.10.04 |
---|---|
logging "linux platform log" without usb connection (0) | 2016.09.28 |
kill parent and child process sametime (0) | 2016.02.04 |
TEMP_FAILURE_RETRY (0) | 2015.12.01 |
[linux] openat / open 의 차이점 (0) | 2015.10.29 |