review: 如果想在開機時掛載文件需要在fstab上添加掛載設備!
LVM:(邏輯卷管理)
PV(physical volume 物理卷:來源的設備空間)
VG(volume group 由PE組成的空間)
LV(logical volume真實使用的由VG分配的空間)
創建LVM:
1.fdisk n 出空間
2.fdisk t 修改Hex code (輸入L顯示所有code) LVM 的code是8e
3.partprobe 重載分區
4.pvcreate </dev/.. (設備路徑)>
5.pvdisplay : 顯示pv的信息
6.vgcreate -s <16M : PE大小> <vg0 : 卷組名> <設備名 : /dev/..>
7.vgdisplay
8.lvcreate -L <大小 : 1G> -n <lv0 : 設備名> <vg0 : 分配的卷組名>
9.lvdisplay
10.mkfs.xfs </dev/vg0/lv0 : 設備名>
可執行的操作 lvextemd -L <擴展後的空間 : 2G> <設備名 : /dev/vg0/lv0>
要進行刷新才識別到新的 xfs_growfs <設備名>
C語言開始:
file <文件> : 查看文件類型
echo $? 顯示上一次操作的返回值
vim 編輯器
gcc 編譯器
編譯步驟:
總和步驟: gcc hello.c -o hello
1.預處理 gcc -E <源碼文件 *.c> -o <*.i> 對頭文件的全部展開(包括各種拓撲關係) 同時進行宏定義以及擦除註釋
2.編譯 gcc -S <預處理文件 *.i> -o <*.s> 彙編代碼
3.彙編 gcc -c <彙編代碼文件 *.s> -o <*.o> 二進制代碼可以與別的二進制代碼進行重定向 (file中信息有 relocatable : 可重定向的)
4.鏈接 gcc <彙編二進制代碼 *.o> -o <可執行文件名>
linux下ELF是指二進制文件
函數類型:
1.可變參函數
2.遞歸函數
3.泛型編程
推薦書籍:《C語言接口與實現》
上課內容:
/*************************************************************************
> File Name: class.c
> Author: khalil
> Mail: [email protected]
> Created Time: Sat 17 Oct 2015 02:36:53 PM CST
************************************************************************/
#if 1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char * my_strcpy(char *dest_str,const char * src_str);
char * my_strncpy(char *dest_str,const char * src_str,size_t n);
int main(int argc , char ** argv)
{
char *str = "hello,world!~~~~~";
char str2[100] = {0};
char str3[100] = {0};
char str4[100] = {0};
//把字符串str的內容拷貝到str2
// strcpy(str2,str);
// my_strcpy(str2,str);
my_strncpy(str3,str,50);
// printf("%s\n",str2);
// printf("%s\n",str3);
printf("%d\n",strlen(str3));
// my_strncpy(str4,str,3);
// printf("%s\n",str4);
return 0;
}
char * my_strcpy(char *dest_str,const char * src_str)
{
//1.檢測傳入參數
//2.實現拷貝
//3.返回dest地址
//
//不建議對傳入的指針參數直接進行使用
char * dest = dest_str;
const char * src = src_str;
if (dest_str == NULL || src_str == NULL || dest_str == src_str)
{
return dest_str;
}
while((*dest++ = *src++) != '\0'){
}
return dest_str;
}
char * my_strncpy(char *dest_str,const char * src_str,size_t n)
{
char * dest = dest_str;
const char * src = src_str;
size_t i = 0;
if (dest_str == NULL || src_str == NULL || dest_str == src_str)
{
return dest_str;
}
for ( ; (i < n)&&(*src) ; i++)
{
*dest++ = *src++;
}
for( ; i < n ;)
{
*dest++ = '\0';
}
return dest_str;
}
#endif
#if 0
int main (int argc , char ** argv)
{
int i = 0 ; //操作符兩邊用空格隔開
int a = 10 , b = 20 ; //不建議,每行只對一個變量賦值
//要注意縮進
return 0 ;
}
#endif
#if 0
//註釋的三種方式:
// 1.單行註釋 //
// 2. 塊註釋 /**/
// 3.條件註釋
// #if (1|0)
// #endif
//
// 關鍵字(系統可以識別的,系統自帶的)和標識符(用戶創建的名字)
// Tip: C語言中有32個關鍵字!
//
// 1.標識符由數字字母下劃線組成,必須以字母下劃線開始
// 2.常見的命名規範:
// (1): int ListNode; //Win ver
// int List_node; //Linux ver -推薦使用!
// (2): 要求:見名識義
// (3): 用最少的字母表示出最大的含義!
//
#endif
#if 0
//*.c 實現功能的文件
// 在/usr/lib中存在它的編譯後代碼
// *.o是靜態庫 *.so是動態庫
// 一般情況下 使用者只能獲得.c編譯後的文件
//
//*.h 功能說明文件
//
//linux內核
//
//1.編程規範
//
//字符串要注意特殊字符,以及他們strlen中的長度
//要注意/的轉義作用
//
#include<stdio.h>
#include<string.h>
//可以通過 man <函數名> 來查看它的頭文件
int main(int argc , char ** argv)
{
char string[] = {"hello,world!"};
printf("%d",strlen(string));
printf(string);
return 0;
}
#endif
#if 0
#include<stdio.h>
//提高程序的局部性
int main(int argc , char **argv)
{
int array[] = {12,123,213,213,21,3,213,21,312,3};
int arr_len = sizeof(array) / sizeof (array[0]);
//不要在循環語句中進行計算 會降低程序的效率
int i = 0;
for (i = 0 ; i < arr_len ; ++i){
printf("%d\n",array[i]);
}
return 0 ;
}
#endif
#if 0
#include<stdio.h>
int main(int argc , char ** argv){
int flag ;
scanf("%d" , & flag);
if (flag == 0){
printf("---Hello , World!---\n");
return 0;
}else{
printf("---Nope! You're wrong!---\n");
return 1;
}
}
#endif