| Code: |
#include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <sys/stat.h> int main(void) { int fd; pid_t pid; char buf[1024]; char tmp_file[] = "/tmp/miniftpd.XXXXXX"; fd = mkstemp(tmp_file); unlink(tmp_file); write(fd, "test", 4); pid = fork(); if(pid == 0) { lseek(fd, 0, SEEK_SET); memset(buf, 0, 1024); read(fd, buf, 1024); fprintf(stderr, "%s\n", buf); } return 0; } |
임시파일 생성하는 mkstemp()는 다른 임시파일 관련 함수들이 가지고 있는 보안상의 문제를 해결한 함수이다.template로 사용되는 변수(위에서는 tmp_file 배열)에서 X는 반드시 6개가 들어가야 한다. 6개의 X가 random값으로 변하면서 파일을 생성하는데 template를 저장하는 변수는 수정이 가능한 변수여야한다. 만약 배열로 하지않고 고정된포인터(char *tmp_file = "/tmp/miniftpd.XXXXXX";)를 사용하면 세그먼트폴트 발생한다.

comments
comments rss (+댓글 쓰러가기)