7.檔案屬性相關函式:access/chmod/chown/truncate
阿新 • • 發佈:2018-12-15
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; }