2013-04-22 7 views
4

나는 이미 원하는 것을 할 수있는 방법을 찾았지만 더러워 보입니다. 난 그냥 간단한 일특정 디렉토리에 파일을 만드는 방법

sprintf(serv_name, "Fattura-%i.txt", getpid()); 
    fd = open(serv_name, PERMISSION | O_CREAT); 
    if (fd<0) { 
     perror("CLIENT:\n"); 
     exit(1); 
    } 

에게하고 싶은 나는 새 파일이 대신 내 프로그램의 디렉토리에 작성, 그것은 하위 디렉토리에서 직접 만들어지는 것을 원한다. 예를 들어 ./program/ ./program/newdir/ ./program/newdir/

나는 파일에 대해 원하는 경로 인 "serv_name"문자열을 직접 넣으려고했다. like

sprintf("./newdir/fattura-%i.txt",getpid()); 

/는 아니지만 /를 사용해보십시오. 어떻게 할 수 있습니까? 나는이 프로그램의 끝에서 알게되었다 유일한 방법은, 풋 :

mkdir("newdir",IPC_CREAT); 
system("chmod 777 newdir"); 
system("cp Fattura-*.txt ./fatture/"); 
system("rm Fattura-*.txt"); 

답변

2

이 시도, 그것은 작동합니다. 내가 변경하는 것 : 내가 대신 openfopen를 사용하고 있기 때문에 나는 sprints 대신 snprintf을 사용 안전 :

#include <stdio.h> 
#include <sys/stat.h> 
#include <sys/types.h> 
#include <unistd.h> 
#include <stdlib.h> 

int main() { 
    char serv_name[1000]; 
    mkdir("newdir", S_IRWXU | S_IRWXG | S_IRWXO); 
    snprintf(serv_name, sizeof(serv_name), "newdir/Fattura-%i.txt", getpid()); 
    FILE* f = fopen(serv_name, "w"); 
    if (f < 0) { 
     perror("CLIENT:\n"); 
     exit(1); 
    } 
} 
+0

MMH 메신저 확실하지 .. 난 이미이 프로그램의 일부라고 말했하지 않은 곳 우리가 디렉토리에서 이동하는 파일입니다, 내가 소켓에서받는 파일입니다 .. 그리고 나는 위험없이 fopen을 사용할 수 있는지 모른다. – ReTanica

+0

파일을 가져온 위치는 중요하지 않다. 디스크에 있습니다. – piokuc

+0

당신의 솔루션은 잘 작동했습니다 !! 고맙습니다! – ReTanica

관련 문제