I.Linux C 创建目录函数mkdir的mode设置问题 

函数原型: 

#include <sys/stat.h>  


int mkdir(const char *path, mode_t mode);



参数: 

path是目录名 

mode是目录权限 

返回值: 

返回0 表示成功, 返回 -1表示错误,并且会设置errno值。 

mode模式位: 

mode 表示新目录的权限,可以取以下值: 

S_IRUSR  

S_IREAD  


S_IWUSR  

S_IWRITE  

S_IXUSR  

S_IEXEC  

S_IRWXU  

This is equivalent to (S_IRUSR | S_IWUSR | S_IXUSR).  

S_IRGRP  

Read permission bit for the group owner of the file. Usually 040.  

S_IWGRP  

Write permission bit for the group owner of the file. Usually 020.  

S_IXGRP  

Execute or search permission bit for the group owner of the file. Usually 010.  

S_IRWXG  

This is equivalent to (S_IRGRP | S_IWGRP | S_IXGRP).  

S_IROTH  

Read permission bit for other users. Usually 04.  

S_IWOTH  

Write permission bit for other users. Usually 02.  

S_IXOTH  

Execute or search permission bit for other users. Usually 01.  

S_IRWXO  

This is equivalent to (S_IROTH | S_IWOTH | S_IXOTH).  

S_ISUID  

This is the set-user-ID on execute bit, usually 04000. See How Change Persona.  

S_ISGID  

This is the set-group-ID on execute bit, usually 02000. See How Change Persona.  

S_ISVTX  

This is the sticky bit, usually 01000.



例子: 

#include <sys/types.h> #include <sys/stat.h> 
int status; 

status = mkdir("/home/newdir", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); 

这样就创建了一个newdir目录,权限通过ls -al 查看为 

drwxr-xr-x 

跟用linux命令mkdir创建的目录权限位一致。 



II. linux下C语言创建多级目录 

int   CreateDir(const   char   *sPathName)   

  {   

  char   DirName[256];   

  strcpy(DirName,   sPathName);   

  int   i,len   =   strlen(DirName);   

  if(DirName[len-1]!='/')   

  strcat(DirName,   "/");   

    

  len   =   strlen(DirName);   

    

  for(i=1;   i<len;   i++)   

  {   

  if(DirName[i]=='/')   

  {   

  DirName[i]   =   0;   

  if(   access(DirName,   NULL)!=0   )   

  {   

      if(mkdir(DirName,   0755)==-1)   

      {    

                      perror("mkdir   error");    

                      return   -1;    

      }   

  }   

  DirName[i]   =   '/';   

  }   

  }   

    

  return   0;   

  }



III.linux c 编程:创建一个线程,监视某个目录,一旦目录里出现新的文件,就将文件转移到指定的目录里去。 

/*  

头文件  

*/  

#define SRCPATH "srcpath/"  

#define DSTPATH "dstpath/"  


int movefile()  

{  

DIR *dir;  

struct dirent *dt;  

FILE *fp1,*fp2;  

char filename1[256],filename2[256];  

char buf[1024];  

int readsize,writesize;  


if((dir = opendir(SRCPATH)) == NULL)  

{  

printf("opendir %s error\n",SRCPATH);  

return -1;  

}  

memset(filename1,0,sizeof(filename1));  

strcpy(filename1,SRCPATH);  

memset(filename2,0,sizeof(filename2));  

strcpy(filename2,DSTPATH);  

while(1)  

{  

while((dt = readdir(dir)) != NULL)  

{  

if(strcmp(dt->d_name,".")==0||strcmp(dt->d_name,"..")==0)  

{  

continue;  

}  

//如果这个目录里 还有目录,可以在这加判断  

//这里假设初始为空目录  

strcat(filename1,dt->d_name);  

strcat(filename2,dt->d_name);  

//如果进程资源较少可以直接用linux系统命令  


fp1 = fopen(filename1,"rb");  

if(fp1==NULL)  

{  

printf("open %s failed /n",filename1);  

return -1;  

}  


fp2 = fopen(filename2,"wb");  

if(fp2==NULL)  

{  

printf("open %s failed /n",filename2);  

fclose(fp1);  

return -1;  

}  


while((readsize = fread(buf,sizeof(buf),1,fp1))>0)  

{  

//total += readsize;  

memset(buf,0,sizeof(buf));  

writesize = fwrite(buf,sizeof(buf),1,fp2);  

if(writesize!==readsize)  

{  

printf("write error");  

return -2;  

fclose(fp1);  

fclose(fp2);  

}  

}  

fclose(fp1);  

fclose(fp2);  

rmdir(filename2);  

}  

}  

}  


int main(int argc,char **argv)  

{  

pthread_t id1;  

int ret;  

ret = pthread_create(&id1, NULL, (void*)movefile, NULL);  

return ret;  

}