一步一步教你创建自己的C库

    写过C/C++的程序员都知道要想程序正确的编译通过,需要引用一些通用的头文件,如#include <stdio.h>,有时我们自己也写过好多具有独立功能通用的函数,那么我们怎么使用自己写好的通用函数库呢,下面我将以数据结构中我们常见的循环链表为例,一步一步讲解怎么建立自己的C库: 首先在根目录下创建一个名叫mylib的目录mkdir /mylib 在目录中建立如下文件  # tree -T .    |-- Makefile    |-- cutil.h    |-- cycle.c    |-- list.h       `-- man         其中cutil.h是通用头文件,所有其它定义的头文件都包含于其中。Cycle.c是创建循环链表的相关函数实现,list.h中是创建循环链表的函数声明。Man目录用于说明各函数的作用与用法,考虑到篇幅,本文中省略此步。 各文件内容如下所示      1)    Makefile内容BIN = libcutil.so LDFLAGS = -lpthread CFLAGS += -g -Wall -shared -fPIC LIBS = -L . all:$(BIN) OBJECT=${patsubst %.c, %.o, ${wildcard *.c}} .c.o:         ${CC} -o $@ -c $? ${CFLAGS} $(BIN):${OBJECT}         ${CC} $(CFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS) install:         cp ./*.so /usr/lib .PHONY:clean clean:         -rm *.o $(BIN) 2)    下面是cycle.c的内容#include "cutil.h" list create_list_head( void ) {     list head = NULL;     head = (list)malloc(sizeof *head);     head->item = 1;     return head; } void insert_cycle_node(list p,int num) {     int i;     list s;     s = p;     for(i = 2;i<= num ;i++)     {         s->next =(list)malloc(sizeof *s);         s = s->next;         s->item = i;     }     s->next = p; } void print_cycle_list(list p) {     list s;     s = p;     int count = 1;     while(s->next != p)     {         printf("The %dth Item value is:%d\n",count++,s->item);         s = s->next;     }     printf("The %dth Item value is:%d\n",count,s->item); } void destroy_cycle_list(list p) {     list s,ptmp;     s = p;     while(s->next != p)     {         ptmp = s;         s = s->next;         free(ptmp);     }     free(s); } 3)    list.h内容如下:#ifndef __LIST_H__ #define __LIST_H__ typedef struct _list *list; struct _list{     int item;     list next; }; list create_list_head( void );          //创建链表头结点 void insert_cycle_node( list p,int num );   //插入循环链表结点 void print_cycle_list( list p );         //打印循环链表 void destroy_cycle_list( list p);        //销毁循环链表 #endif 4)    cutil.h内容如下:#ifndef __CUTIL_H__ #define __CUTIL_H__ #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include "list.h" #endif 编译生成动态库 make && make install...
阅读全文
LANMP

手把手教你用本地ISO安装Linux软件

1、挂接光盘到虚拟机中,直接上图 2、创建挂载目录 mkdir /media/cdrom 3、挂载光盘 mount /dev/cdrom /media/cdrom 4、添加光盘为yum源 检查/etc/yum.repos.d/目录是否存在CentOS-Media.repo这个文件,如存在,此步略过,如果不存在,手动建立,加入代码如下: name=install packet from DVD baseurl=file:///media/cdrom gpgcheck=0 enabled=1 #gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 5、检查是否可用 输入命令: yum list 如果出现以类似图片中的内容就说明你成功了
阅读全文
C/C++

第3课 SHELL中的重定向和管道

点击这里 可以赞助果子哦 当然不赞助也是可以免费观看的    下载地址: http://pan.baidu.com/s/1otddm                           1. 什么叫重定向 将输入或输出重新指定到别的位置。 2. 重定向输出 2.1. 命令执行数据流 文件/设备---- 标准输入 -->命令 --- 标准输出 -->文件/设备                            |                                   标准错误                                      ↓                                               文件/设备 直接输入:ls ?l > lsoutput.txt 追加:ls ?l /home >> lsoutput.txt 输出到空设备:/dev/null “>” 代表重定向到哪里 “1” 表示stdout标准输出,系统默认值是1 ">/dev/null"等同于"1>/dev/null" “2” 表示stderr标准错误 “&” 表示等同于的意思,2>&1,表示2的输出重定向等同于1 举例:killall ser > /dev/null 2>&1 3. 重定向输入 3.1. shell终端中交互式输入内容 格式:cat >> 2.txt <<EOF    EOF 3.2. 从一个文件中读取内容赋值给一个变量 格式:read variable < filename 4. 管道 管道好比自来水管,从前往后流! 举例: 1) 将指定文件夹内的文件按文件大小从小到大排列。 2) 查看mysql进程是否存在 3) 查询一个软件包(rpm)的安装信息 利用管道和重定向将查询到的软件安装信息输出到指定文件
阅读全文
C/C++

第2课 SHELL中的变量

点击这里 可以赞助果子哦 当然不赞助也是可以免费观看的 下载地址: http://pan.baidu.com/s/1otddm 1. 变量的分类 1.1. 系统环境变量 系统本身所有,通常为大写字母 系统变量通过set或declare指令进行查看 1.2. UDV变量(user defined variable) 用户创建和维护,建议大写(为什么?) 原因: 避免冲突与混淆,因为Linux系统中命令全部采用小写的方式 2. 变量的属性和定义 2.1. 变量的属性 1) Shell中所有变量定义都为字符串。 2) 变量区分大小写,如:foo和Foo是两个不同的变量 3) 变量必须以字母或下划线开头,不得有”,”,”:”,”\”等特殊字符。 3. 变量的声明 1) 变量的定义 变量名=值  (变量名与值之间”=”号没有空格) 举例:LANG=cn 与LAGN=  en    LANG =en 2) 声明带空格变量 需要加上引号??”” 举例:MY=23 67 3) 声明一个只读变量 readonly MY_UDV=guozi 4) 修改变量 修改环境变量 例:PATH=$PATH:/opt/bin 修改用户自定义变量 例:SRC=”guozi” 4. 变量的使用 变量前加“$”符号 echo $HOME  或echo ${HOME} echo $USER或echo ${USER} 思考:为什么要使用变量?为什么要添加界定符:{} ?
阅读全文
Shell

第1 课 学习shell的意义

点击这里 可以赞助果子哦 当然不赞助也是可以免费观看的 下载地址: http://pan.baidu.com/s/1otddm 一、什么是shell? Shell 是介于用户与系统之间,帮助用户与系统进行沟通的工具。 除了文字模式的 shell 外,GNOME、KDE这类图形界面也属于 shell 的范畴。我们通常提到 shell 时都是指狭义的 shell,即文字模式的 shell。 二、Linux中有哪些shell 一般来说,shell可以分成两类。第一类是由Bourneshell衍生出来的包括sh,ksh,bash,与zsh。第二类是由Cshell衍生出来的,包括csh与tcsh。除此之外还有一个rc。 三、为什么要学习 shell 1. 图形用户界面??只是一个程序套件,文字模式的shell 功能和能执行的任务则比图形界面要强得多。 2. shell 是文字模式,因此远程登录和传输的速度比图形界面更快 3. shell 使用更方便。在图形界面需要打开许多窗口执行许多次点击的任务,使用 shell 也许只需要简单几个命令就能完成了。 举例: (1) 查看一个文件或目录的大小  ls du (2) 定时执行一个任务 四、学习哪种shell Linux 下支持的 shell 有许多种,但我们只要学习最应用最广泛的 bash shell 就行了。而且现在主要的 Linux 发行版都使用 bash 做为默认的管理 shell。所以不论使用哪种 Linux 发行版,都无可避免地要学习 bash。 五、如何写一个简单的bash  shell 1) 可以使用任何文本编辑工具编写,如:vim #!/bin/bash   #放置在文件的开头 2) 设置脚本执行权限 chmod a+x  filename chmod 700 filename 3) 执行脚本 bash your_script.sh sh your_script.sh ./your_script.sh
阅读全文