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/ に作成されるようにします。

ファイルに必要なパスを文字列「serv_name」に直接入れようとしましたが、次のようになりました

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

また、/ ではなく \\ を試しました。これはどのように行うことができますか?私が見つけた唯一の方法は、プログラムの最後に次のように入力することでした:

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

1 に答える 1

2

これを試してください、うまくいきます。変更した点:fopenの代わりにopenを使用し、 のsnprintf代わりに使用しましsprintsた。より安全だからです。

#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);
    }   
}
于 2013-04-22T18:02:08.113 に答える