C 프로그램을 사용하여 지정된 디렉토리에 바이너리 파일을 작성해야합니다. 하지만, 필자는 필자는 디렉토리 구조가 존재하지 않는다면 나를 위해 하나를 만들어야한다는 것을 확실히하고 싶다.C의 디렉토리에 파일을 읽거나 쓰는 방법은 무엇입니까?
어떻게하면됩니까?
C 프로그램을 사용하여 지정된 디렉토리에 바이너리 파일을 작성해야합니다. 하지만, 필자는 필자는 디렉토리 구조가 존재하지 않는다면 나를 위해 하나를 만들어야한다는 것을 확실히하고 싶다.C의 디렉토리에 파일을 읽거나 쓰는 방법은 무엇입니까?
어떻게하면됩니까?
stat()
을 사용하여 리프 디렉토리가 있는지 확인하고 mkdir()
을 사용하여 위에서 아래로 반복하여 디렉토리를 만들어야합니다. 또는 수표를 포기하고 디렉토리 생성을 시작할 수도 있습니다. 디렉토리가 이미 존재하면 EEXIST
오류가 발생하여 실패합니다. 이것은 단지 쉬운 방법입니다.
정확성을 염두에 둔다면 더 좋은 방법이 있습니다. 원하는 경로의 후속 구성 요소 (디렉토리)에 openat()
을 사용하고 부족한 경로를 생성하려면 mkdirat()
을 사용해야합니다. 그렇게하면 가능한 경주를 피할 수 있습니다. 결국 openat()
을 사용하여 파일을 열어야합니다.
위의 시스템 호출을 어떻게 사용해야하는지 보려면 관련 manpages을 확인하십시오.
위의로드가 충분히 길지 않은 경우 아래의 간단한 리눅스 맛의 물고기를 찾을 수 있습니다. xopen()
함수를 사용하면 지정된 경로에서 파일을 열어 경로를 따라 디렉토리를 만들 수 있습니다.
#include <errno.h>
#include <fcntl.h>
#include <string.h>
#include <sys/stat.h>
#include <unistd.h>
/* Look out! It modifies pathname! */
int xopen(char *pathname, int flags, mode_t mode, mode_t dirmode)
{
int fd, errsv;
int dirfd = AT_FDCWD;
char *ptr = pathname;
while (*ptr == '/')
ptr++;
for (;;) {
strsep(&ptr, "/");
if (ptr == NULL) {
fd = openat(dirfd, pathname, flags, mode);
break;
}
while (*ptr == '/')
ptr++;
if (*ptr == '\0') {
errno = EISDIR;
fd = -1;
break;
}
if ((fd = mkdirat(dirfd, pathname, dirmode)) < 0 && errno != EEXIST)
break;
if ((fd = openat(dirfd, pathname, O_DIRECTORY)) < 0)
break;
if (dirfd != AT_FDCWD)
close(dirfd);
dirfd = fd;
pathname = ptr;
}
errsv = errno;
if (dirfd != AT_FDCWD)
close(dirfd);
errno = errsv;
return fd;
}
무엇을 시도 했습니까? 어디서 붙어 있니? readdir (3)과 mkdir (2)에 익숙합니까? – sarnold
여기 해결책을 찾을 수 있습니다 : http://stackoverflow.com/questions/675039/how-can-i-create-directory-tree-in-c-linux –
내가 아는 한, 전적으로 이식 가능한 방법이 존재하지 않습니다. 디렉토리를 처리하십시오. 어떤 플랫폼을 사용하고 계십니까? – thb