1. 程式人生 > >Linux高階程式設計基礎——檔案系統程式設計之操作檔案屬性

Linux高階程式設計基礎——檔案系統程式設計之操作檔案屬性

檔案系統程式設計之操作檔案屬性

/編寫程式實現以下功能: 1.新建檔案,設定檔案許可權遮蔽字為0; 2.建立該檔案的硬連結檔案,列印硬連結檔案的inode節點號和檔案大小; 3.建立該檔案的軟連結檔案,列印軟連結檔案的inode節點號和檔案大小; 列印軟連結檔案中的內容; 4.列印原始檔的inode節點號,檔案大小和連結數目; 5.呼叫unlink對原始檔進行操作,列印原始檔連結數目;/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>

int main()
   {
    umask(0);
    if (creat("wenjian2",S_IRWXU|S_IRWXG|S_IRWXO) < 0)  //建立一個名為“wenjain2”的文字檔案,
                                                                                    //“S_IRWXU|S_IRWXG|S_IRWXO”給這個檔案所有使用者可讀可寫可執行的許可權,
      { 
        perror ("creat");
        printf ("errno is : %d \n",errno);
      }
    else
      printf ("wenjian2 creat ok \n");

    if (link("wenjian2","wenjian3") < 0)  //建立檔案“wenjian2”的一個 硬連結檔案“wenjian3”
      {  
        perror ("link");
        printf ("errno is : %d \n",errno) ;
      } 
    else
      printf ("硬連結檔案 建立成功\n ");

struct stat statwj,statwj1,statwj2;
    if (lstat("wenjian3",&statwj) < 0)  //獲取硬連結檔案“wenjian3”的屬性,放在statwj結構體中,
        perror ("lstat");
    printf ("硬連結檔案節點號 : %ld \n",statwj.st_ino);   //輸出檔案節點號
    printf ("硬連結檔案大小 :%ld \n ",statwj.st_size);   //輸出檔案大小
    
    if (symlink ("wenjian2","wenjian4") < 0)  //建立檔案“wenjian2”的一個 軟 連結檔案“wenjian4"”
      { 
         perror ("symlink");
         printf ("errno is : %d \n",errno);
      }
    printf ("軟連結檔案 建立成功 \n");
    
    lstat ("wenjian4",&statwj1);    //獲取軟連線檔案“wenjian4”的屬性,放在statwj1結構體中,
    char wj[10];
    if (readlink ("wenjian4",wj,1024) < 0)  //讀取軟連線檔案“wenjian4” 它 本 身 的屬性,放在wj陣列中,
      {  
       perror("readlink");
       printf ("errno is : %d \n",errno); 
      }
    printf ("軟連結檔案節點號 :%ld \n",statwj1.st_ino);   //輸出檔案節點號
    printf ("軟連結檔案大小:%ld \n ",statwj1.st_size);   //輸出檔案大小
    printf ("軟連結檔案內容: %s \n",wj);  //輸出檔案裡面存放的內容 ,,裡面放的是原始檔“wenjian2”的名字,


    if (unlink("wenjian4") < 0)   //刪除軟連線檔案“wenjian4”
      { 
        perror ("unlink");
        printf ("errno is : %d",errno);
      }
    else 
        printf ("unlink is ok \n");
   
    if (stat("wenjian2",&statwj2) < 0)  //獲取檔案“"wenjian2”的屬性,
        perror ("lstat");
    printf ("nlink is :%ld \n",statwj2.st_nlink); //輸出該檔案的連結檔案數目,
    printf ("wenjian2檔案節點號 :%ld \n",statwj2.st_ino);  //輸出檔案節點號


return 0; 
   }

/*
什麼是硬連結,什麼是軟連線?
硬連結是獨自的一個檔案,但是軟連線相當於原檔案的一個快捷方式,硬連結和原來的檔案沒有什麼區別,而且共享一個 inode(節點)號而軟 連結不共享 inode,2.若原檔案刪除了,則該軟連線則不可以訪問,而硬連線則是可以的。(簡單的說明,可能存在錯誤)
軟連線檔案裡面存放的是什麼?
裡面放的是原始檔“wenjian2”的名字,
*/