[英]Create Directory and Store File (C programming)
我想創建一個目錄,該目錄的名稱以進程ID結尾(以使其唯一),然后將我剛剛寫入的新文件存儲在該目錄中。
我想要的是:
1)創建一個名為: mydirectory.1923的新目錄(進程ID號示例)
2)存儲我剛剛使用創建的文件
FILE * fPointer = fopen("new.txt",w+)
進入mydirectory.1923
我到目前為止所擁有的是:
int bufSize = 20;
int pid = getpid();
char *fileName = malloc(bufSize);
char *prefix = "that.rooms.";
snprintf(fileName, bufSize,"%s%d", prefix, pid);
printf("%s\n",fileName);
struct stat st = {0};
if (stat(fileName, &st) == -1) {
mkdir(fileName, 0755);
}
DIR *dir = opendir (fileName);
if (dir != NULL) {
FILE *fLib = fopen("library.txt" , "w+");
fclose(fLib);
}
closedir(fileName);
return 0;
我的問題:
該代碼不起作用,顯然它在DIR部分顯示錯誤。
如果要創建目錄,創建文件並將該文件直接存儲到新目錄,這是正確的做法嗎?
有什么建議或建議可以做得更好嗎? 謝謝。
一些評論:
limits.h
中包含宏PATH_MAX
和FILE_MAX
。 closedir
函數也會收到一個DIR *
參數,我想這將是您代碼中的dir
。 fopen
調用之前至少將其包含在chdir
中。 我不建議使用后者,因為它會影響整個進程的工作目錄。 以下是您的代碼的快速且骯臟的修補版本,它考慮到上述因素,創建了目錄和其中的新文件:
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/stat.h>
#include <limits.h>
int main(int argc, char **argv){
int pid = getpid();
char dirName[NAME_MAX+1];
char *prefix = "that.rooms.";
snprintf(dirName, NAME_MAX + 1,"%s%d", prefix, pid);
printf("%s\n",dirName);
struct stat st = {0};
if (stat(dirName, &st) == -1) {
if(mkdir(dirName, 0755) != -1){
char libPath[PATH_MAX+1];
snprintf(libPath, PATH_MAX + 1, "%s/library.txt", dirName);
FILE *fLib = fopen(libPath , "w+");
fclose(fLib);
}else{
perror("mkdir: ");
}
}
return 0;
}
更改了變量名稱,使它更清晰:
dirName
用於保存目錄名稱。 它使用NAME_MAX
因為這是文件名長度的系統限制 libPath
用於保存要創建的library.txt
文件的路徑。 如果您的pid是3123,則libPath
會在snprintf
調用后讀取that.rooms.3123/library.txt
。 它使用PATH_MAX
因為這是文件路徑長度的系統限制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.