ucore中sign c函式詳解

2021-08-02 22:03:42 字數 2810 閱讀 1244

int main(int argc, char *argv)

if (stat(argv[1], &st) != 0)

printf(「』%s』 size: %lld bytes\n」, argv[1], (long long)st.st_size);

if (st.st_size > 510)

char buf[512];

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

file *ifp = fopen(argv[1], 「rb」);

int size = fread(buf, 1, st.st_size, ifp);

if (size != st.st_size)

fclose(ifp);

buf[510] = 0x55;

buf[511] = 0xaa;

file *ofp = fopen(argv[2], 「wb+」);

size = fwrite(buf, 1, 512, ofp);

if (size != 512)

fclose(ofp);

printf(「build 512 bytes boot sector: 『%s』 success!\n」, argv[2]);

return 0;

}(1)struct stat st;

struct stat結構體簡介

在使用這個結構體和方法時,需要引入:sys/types.h,sys/stat.h

struct stat這個結構體是用來描述乙個linux系統檔案系統中的檔案屬性的結構。

可以有兩種方法來獲取乙個檔案的屬性:

1、通過路徑:

int stat(const char *path, struct stat *struct_stat);

int lstat(const char *path,struct stat *struct_stat);

兩個函式的第乙個引數都是檔案的路徑,第二個引數是struct stat的指標。返回值為0,表示成功執行。

執行失敗是,error被自動設定為下面的值:

ebadf: 檔案描述詞無效

eloop: 遍歷路徑時遇到太多的符號連線

enametoolong:檔案路徑名太長

enoent:路徑名的部分元件不存在,或路徑名是空字串

enomem:記憶體不足

enotdir:路徑名的部分元件不是目錄

這兩個方法區別在於stat沒有處理字元鏈結(軟鏈結)的能力,如果乙個檔案是符號鏈結,stat會直接返回它所指向的檔案的屬性;而lstat返回的就是這個符號鏈結的內容。這裡需要說明一下的是軟鏈結和硬鏈結的含義。我們知道目錄在linux中也是乙個檔案,檔案的內容就是這這個目錄下面所有檔案與inode的對應關係。那麼所謂的硬鏈結就是在某乙個目錄下面將乙個檔名與乙個inode關聯起來,其實就是新增一條記錄!而軟鏈結也叫符號鏈結更加簡單了,這個檔案的內容就是乙個字串,這個字串就是它所鏈結的檔案的絕對或者相對位址。

2、通過檔案描述符

int fstat(int fdp, struct stat *struct_stat);  //通過檔案描述符獲取檔案對應的屬性。fdp為檔案描述符

下面是這個結構的結構

struct stat ;stat結構體中的st_mode 則定義了下列數種情況:

s_ifmt 0170000 檔案型別的位遮罩

s_ifsock 0140000 scoket

s_iflnk 0120000 符號連線

s_ifreg 0100000 一般檔案

s_ifblk 0060000 區塊裝置

s_ifdir 0040000 目錄

s_ifchr 0020000 字元裝置

s_ififo 0010000 先進先出

s_isuid 04000     檔案的(set user-id on execution)位

s_isgid 02000 檔案的(set group-id on execution)位

s_isvtx 01000 檔案的sticky位

s_irusr(s_iread) 00400 檔案所有者具可讀取許可權

s_iwusr(s_iwrite)00200 檔案所有者具可寫入許可權

s_ixusr(s_iexec) 00100 檔案所有者具可執行許可權

s_irgrp 00040 使用者組具可讀取許可權

s_iwgrp 00020 使用者組具可寫入許可權

s_ixgrp 00010 使用者組具可執行許可權

s_iroth 00004 其他使用者具可讀取許可權

s_iwoth 00002 其他使用者具可寫入許可權

s_ixoth 00001 其他使用者具可執行許可權

上述的檔案型別在posix中定義了檢查這些型別的巨集定義:

s_islnk (st_mode) 判斷是否為符號連線

s_isreg (st_mode) 是否為一般檔案

s_isdir (st_mode) 是否為目錄

s_ischr (st_mode) 是否為字元裝置檔案

s_isblk (s3e) 是否為先進先出

s_issock (st_mode) 是否為socket

在使用這個結構體和方法時,需要引入:sys/types.h、sys/stat.h struct stat這個結構體是用來描述乙個linux系統檔案系統中的檔案屬性的結構。

python中函式詳解

1 什麼是函式?函式是一種工具,封裝乙個可重複呼叫的 塊 2 為什麼要用函式?如果不使用函式,將變得冗餘。可讀性差 3 怎麼用函式?定義函式 呼叫函式 有參函式 defadd x,y return x y 無參函式 defwelecome print welecome to my home 空函式 ...

Linux中open函式詳解

open 開啟檔案 相關函式 read,write,fcntl,close,link,stat,umask,unlink,fopen 頭文件 include include include 定義函式 int open const char pathname,int flags int open co...

php中iconv函式 詳解

iconv函式庫能夠完成各種字符集間的轉換,是php程式設計中不可缺少的基礎函式庫。用法如下 iconv utf8 gbk string 將字串string 編碼由utf8轉變成gbk 擴充套件如下 詳細出處參考 備註 1 iconv不是php的預設函式,也是預設安裝的模組。需要安裝才能用的。如果是...