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的預設函式,也是預設安裝的模組。需要安裝才能用的。如果是...