1. 程式人生 > >7.檔案屬性相關函式:access/chmod/chown/truncate

7.檔案屬性相關函式:access/chmod/chown/truncate

1.access

int access(const char *pathname, int mode);
檢測當前使用者是否具有[讀/寫/可執行]許可權:R_OK, W_OK,  X_OK
檢測檔案是否存在F_OK  
                                                                                                                                 
  int main(int argc,char* argv[]){                                                                                               
    if(argc<2){                                                                                                                  
      printf("argc<2\n");                                                                                                        
      exit(1);                                                                                                                   
    }                                                                                                                            
                                                                                                                                 
    int ret = access(argv[1],F_OK);  //判斷檔案是否存在                                                                                              
    if(ret==-1){  //檔案不存在,則建立一個檔案                                                                                                                 
      printf("file is not exist,create %s",argv[1]);                                                                               
	  int fd=open(argv[1],O_RDWR|O_CREAT,0664);                                                                                  
    }                                                                                                                                                                                                                                              
  }    

2.chmod

int chmod(const char *path, mode_t mode);
int fchmod(int fd, mode_t mode);
mode_t mode  檔案許可權,八進位制數
例:
  int mode=strtol(argv[2],NULL,8);  //將argv[2]轉換成8進位制的數
  ret=chmod(argv[1],mode);    //修改argv[1]檔案的許可權為mode

3.chown 所有者| 所屬組

int chown(const char *path, uid_t owner, gid_t group);
例:
	ret=chown(argv[1],1001,1002);     

4.truncate 修改檔案大小

int truncate(const char *path, off_t length);
比原來檔案小,刪除後邊的部分
比原來檔案大,向後擴充套件

綜合案例

int main(int argc,char* argv[]){                                                                                                 
  if(argc<3){                                                                                                                    
    printf("argc<3\n");                                                                                                          
    exit(1);                                                                                                                     
  }                                                                                                                              
                                                                                                                                 
  int ret = access(argv[1],F_OK); //判斷檔案是否存在                                                                                                
  if(ret==-1){                                                                                                                   
    printf("file is not exist,create %s",argv[1]);                                                                               
    int fd=open(argv[1],O_RDWR|O_CREAT,0664); //建立檔案                                                                                   
    if(fd<0){                                                                                                                    
      perror("create fail");                                                                                                     
      exit(-1);                                                                                                                  
    }                                                                                                                            
  }                                                                                                                              
                                                                                                                                 
  int mode=strtol(argv[2],NULL,8); //將argv[2]轉換成8進位制的數                                                                                               
  ret=chmod(argv[1],mode); //修改檔案許可權為mode                                                                                                 
  if(ret==-1){                                                                                                                   
    perror("chmod fail");                                                                                                        
    exit(-1);                                                                                                                    
  }                                                                                                                              
  ret=chown(argv[1],1001,1002);  //改變檔案的[user group]                                                                                                  
  if(ret==-1){                                                                                                                   
    perror("chown fail");                                                                                                        
    exit(1);                                                                                                                     
  }         
  ret=truncate(argv[1],1000); //擴充套件檔案大小size                                                                                                    
  if(ret==-1){                                                                                                                   
    perror("truncate fail");                                                                                                     
    exit(-1);                                                                                                                    
  }                                                                                                                       
  return 0;                                                                                                                      
}