본문 바로가기

Programming/C/C++

C/고수준 파일 입출력/파일 포인터와 파일 기술자간 변환

반응형
파일기술자와 파일포인터간 변환

저수준 파일 입출력의 파일기술자와 고수준 파일 입출력의 파일포인터는 상호 변환 가능

- 파일 포인터 생성 : fdopen(3) (파일 디스크립터 오픈의 약자)
  • 파일 기술자와 모드값을 받아 파일 포인터를 생성
- 파일 기술자 생성: fileno(3)
  • 파일 포인터를 인자로 받아 파일 기술자를 리턴
  • 고수준에서 저수준으로 변환

fdopen 함수 사용하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
 
int main(void) {
    FILE *fp;
    int fd;
    char str[BUFSIZ];
 
    fd = open("unix.txt", O_RDONLY);
    if (fd == -1) {
        perror("open");
        exit(1);
    }
 
    fp = fdopen(fd, "r");
 
    fgets(str, BUFSIZ, fp);
    printf("Read : %s\n", str);
 
    fclose(fp);
 
    return 0;
}

fileno 함수 사용하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
 
int main(void) {
    FILE *fp;
    int fd, n;
    char str[BUFSIZ];
 
    fp = fopen("unix.txt""r");
    if (fp == NULL) {
        perror("fopen");
        exit(1);
    }
 
    fd = fileno(fp);
    printf("fd : %d\n", fd);
 
    n = read(fd, str, BUFSIZ);
    str[n] = '\0';
    printf("Read : %s\n", str);
 
    close(fd);
 
    return 0;
}
cs


반응형