在Linux中用C创建目录

时间:2014-08-06 10:27:24

标签: c linux

我有一个创建和处理文件的程序。怎么能告诉prgram从一个子目录中读取一个文件并在另一个子下直接保存另一个文件,这是我试过的:

#include <stdio.h>
#include <sys/stat.h>

int main (){
    char fileName1[10];
    char fileName2[10];
    FILE *in=NULL,*out=NULL;
    // making directory , input directotry exist as subdir in Program  folder  
    mkdir("ouput", 777);
    fileName1="//input//test";
    fileName ="//output//out1";
    ........................  
}

尝试打开文件后没有任何反应,并且尚未创建直接文件。任何暗示我该怎么做! 的更新 现在该目录已创建,但其中的文件是否?

更新 我的fileName有任何索引,所以这就是我正在做的事情:

while((access(fileName,F_OK)!=-1)){ // check if the file  already exist
    sprintf(fileName,"./output/sample%d",index++);  
}

目录的制作工作但是在dir中制作文件是程序崩溃的问题

3 个答案:

答案 0 :(得分:2)

fileName1="./output/sample.txt"; 

在这里考虑输出是目录名称。也可以指定相对路径来打开文件。

答案 1 :(得分:1)

...

char fileName1[10];
char fileName2[10];

...     mkdir(“ouput”​​,777);

正如评论中指出的那样,应该是0777,你真的应该检查返回值。

fileName1="//input//test";

filename1当前是一个字符数组,但您现在将其指向一个字符串,该字符串可能位于只读内存中。您应该尝试使用-Wall进行编译。此外,显然预计此文件将存在于文件系统的根目录中。

fileName ="//output//out1";

再一次。您可能希望将这些声明为char const *或将字符串复制到缓冲区(需要更大)。

答案 2 :(得分:0)

要从c程序创建目录,您必须指定一个umask。来自here的引用:

  

创建新文件或目录时,它的一些权限是   限制,不能设置。每个流程都有一组限制   调用umask,你必须使用umask系统调用来禁用或   启用这些限制。

因此,如果您不希望对该目录的权限进行限制,请将umask指定为0.稍后,您必须将umask设置为以前的值。

一个完整的程序,它在当前路径中创建目录,在创建的目录中创建两个文件:

#include <stdio.h>
#include <sys/stat.h>
#include <string.h>

int main(void)
{
    mode_t process_mask = umask(0);
    mkdir("test",0777);
    umask(process_mask);
    char filename[50] = "./test/file1";
    char filename2[50] = "./test/file2";

    FILE* file1;
    FILE* file2;
    file1 = fopen(filename, "w");
    file2 = fopen(filename2, "w");
    fclose(file1);
    fclose(file2);
    return 0;
}