【2015/10/17】Linux 逻辑卷管理以及C学习日志_Day7 编译步骤,注释,mystrcpy

D7:
    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


发布了28 篇原创文章 · 获赞 3 · 访问量 2万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章