我想创建一个名称以进程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部分的错误。
如果我想创建目录,创建文件并将该文件直接存储到新目录,这是正确的做法吗?
有没有任何建议或建议比这更好?谢谢。
答案 0 :(得分:1)
一些意见:
<?php
echo " echo "This is my <id>";
?>
PATH_MAX
和FILE_MAX
limits.h
函数也会收到closedir
参数,我认为您的代码中会DIR *
。dir
调用之前至少chdir
包含该目录。我不建议使用后者,因为它会影响流程的工作目录。下面是一个快速且脏的修补版本的代码,它会在里面创建目录和新文件,并考虑到上述内容:
fopen
稍微更改了变量名称,以便更清楚:
#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
文件的路径。如果您的pid为3123,library.txt
会在libPath
来电后显示that.rooms.3123/library.txt
。它使用snprintf
,因为这是文件路径长度的系统限制。