Unix C (一)

来源:互联网 发布:spss数据分析简单案例 编辑:程序博客网 时间:2024/05/21 14:50
UNIX C编程:
    一、课程内容:开发环境,内存管理,文件系统,进程管理,信号(进程间的语言)处理,网络通信,线程管理,线程同步。
    二、Unix操作系统知识介绍。
        1、美国AT&T公司(美国电报电话公司),贝尔实验室,1971年,肯.汤普逊、[丹尼斯.里奇],PDP-11,多任务,多用户,多处理器架构,高安全性,高可靠性,高稳定性,关键商务系统,商业应用,移动终端,嵌入式设备。
        2、三大版本派系:A、基于System V。1)IBM的AIX系统,主要用于银行
                     2)Oracle(以前SUN公司的)Solaris,主要用于电信
                     3)惠普的HP-UX,主要用于教育科研
                     4)IRIX,主要用于图形工作站
           B、基于Berkley。   1)FreeBSD
                                    2)NetBSD
                                    3)OpenBSD
                                    4)Mac OS X
             C、基于Linux。     1)Minix:迷你版UNIX系统
                                    2)Linux:GPL,免费开源,商用服务器(RedHat),桌面系统(Ubuntu),嵌入式系统(Android)
    三、Linux操作系统————类Unix系统。
        1、类UNIX操作系统,免费开源。
        2、不同发源版本使用相同内核。
        3、严格意义上讲,Linux仅指操作系统内核,隶属于GNU(GNU Not Unix)工程。
        4、发明人:Linus Torvalds。
        5、标志:小企鹅,名为Tuxedo(燕尾服)。
    四、POSIX(Portable Operating System Interface for Computing Systems)标准————统一系统编程接口规范
        1、IEEE(电气电子工程师协会)和ISO(国际标准化组织)合作制定。
        2、基于POSIX接口的开发是可移植的。
    五、GPL——————通用公共许可证:允许对其成果及其派生成果进行重用,修改和复制,对所有人都是自由的,但是不能声明做了原始工作。
    六、版本。
        1、早期版本:0.01,0.02,...,1.0。
        2、旧计划:介于1.0和2.6之间,A.B.C。
            A表示主版本号,内核大幅更新;
            B次版本号,内核重大修改,奇数为测试版本,偶数为稳定版本。;
            C补丁序号,内核轻微修订。
        3、2003年12月发布2.6.0以后,发布周期缩短,A.B.C-D,E。
            D表示构建次数反映及其微小的更新;
            E描述信息,rc/r-候选版本,后面跟一个数字表示第几个候选版本,数字越大越接近正式版;smp-对称多处理器;pp-专门针对RedHat测试版;EL-RedHat正式企业版;mm-针对最新技术的体验版本;fc-Fedora Core版本。
    七、主流的Linux发行版本。
        1、Ubuntu--大众化,稳定
        2、Linux Mint--时尚
        3、Fedora--桌面版的RedHat,应用丰富
        4、openSUSE    --外观华丽,欧洲国家很受欢迎
        5、Debian--开放,自由,免费
        6、Slackware--简洁,朴素,倾向专业人事
        7、RedHat--经典,支持丰富
        
开发环境
    一、GNU编译环境工具----GCC
        1、支持多种编程语言。C、C++、Object-C、Java、Fortran(用于数学计算)、Pascal、Ada。
        2、支持多种平台:Unix,Linux,Windows。
        3、构建过程----GCC工具链
                     1、编辑:vi hello.c   ->  hello.c
                     2、预编译:头文件扩展,宏扩展。 gcc -E hello.c -o hello.i  ->  hello.i
                     3、编译:gcc -S  hello.i   ->   hello.s
                     4、汇编:gcc -c  hello.s   ->   hello.o
                     5、链接:gcc hello.o (-lc) ->   a.out
        4、文件后缀。
            .h      -C语言源代码头文件
            .c      -C预处理前的C语言源代码文件
            .i      -C预处理后的C语言源代码文件
            .s     -汇编语言文件
            .o      -目标文件
            .a      -静态库文件
            .so     -共享库(动态库)文件
        5、编译单个源文件
            gcc [参数] 文件
            参数:
                1、-c         编译+汇编
                2、-o         指定输出文件路径
                3、-E      预编译
                4、-S         编译产生汇编文件
                5、-pedantic  对程序中不符合标准C的代码给出警告
                6、-Wall      产生尽可能多的警告
                7、-Werror    将警告作为错误
                8、-x         指定源代码文件的语言(默认是按文件扩展名来区分)
                9、-g     生成可调试的可执行文件。
                                 gdb 可调试的可执行文件       进入调试环境,比如对gcc -g hello.c产生a.out;使用gdb a.out进入调试环境
                                 l                           显示程序完整代码
                                 b 行号                      对指定行号设置断点
                                 r                           运行程序(到断点)
                                 s                           进入函数里面
                                 p 变量名                    打印当前行号中变量的值
                                 n                           执行下一行
                                 q                           退出gdb调试环境
                10、-O1/O2/O3 优化等级,缺省O1,O0表示不优化;某些系统上的gcc支持Os,相当于O2.5。
                11、-D        在编译时定义宏
                12、-I        在使用gcc编译时指定头文件的附加搜索路径
        6、编译多个源文件
            gcc [参数]  a.c  b.c  c.c   d.c
            makefile/make(如果脚本不叫makefile,则可以使用gcc -f xxx.mak)
            1、声明外部变量和函数。(定义是声明变量并进行赋值,它伴随着内存的分配;声明没有内存的分配,只是标志以后可以使用)
                在头文件中书写
                    extern  int g_x;
                    int add(int, int);
            2、定义宏、类型别名、自定义类型
                #define PI  3.141592654
                typedef unsigned int UNIT;
                typedef struct student{
                    char name[128];
                    int age;
                }stu;
            3、公共头文件
                #include <stdio.h>
                #include <stdlib.h>
                #include <string.h>
            4、头文件卫士,防止因钻石包(重复包含)含导致的重定义。
                #ifndef __HEAD_H__
                #define __HEAD_H__
                //函数声明,外部变量声明以及结构体声明等
                #endif  //__HEAD_H__
            5、gcc的-I选项,在编译时指定头文件的附加目录
                #include <...>  包含系统指定目录的头文件
                通常的系统的目录:/usr/include
                                                    /usr/local/include
                                                    /usr/lib/gcc/i686-linux-gnu/4.6/include
                                                    /usr/include/c++/4.6  (c++编译器使用)
            6、预处理指令
                #include    包含头文件
                 #define       宏定义
                 #undef        取消宏定义
                 #if                判定宏定义
                 #elif/#else     判定宏定义
                 #endif               结束判定宏定义
                 ##                      连接字符串
                 #                        将宏转换成字符串子面值
                 #error               人为的设置错误,结束并终止预编译过程
                  #warning        人为的设置警告,并不结束并终止预编译过程
                  #line                人为的指定行号
                 #pragma        为处理器提供额外信息
                   #pragma GCC dependency 指定文件           如果指定文件比当前文件新,产生警告
                   #pragma GCC poison 标识符(组)                   如果程序中出现标识符,直接报错,起到禁用某种标识作用
                   #pragma pack(n)                                               对结构体子变量按n(1/2/4/8)字节对齐和补齐(32位操作系统超过4个字节按4个字节对齐补齐)。
                   #pragma pack()                                                 对结构体子变量按缺省方式(系统默认)对齐和补齐。
            7、预定义宏
                __BASE_FILE__                      正在被编译的源文件名
                __FILE__                                    所在的文件名
                __LINE__                                   所在的行号
                __FUNCTION                            所在函数名
                __func__                                    同__FUNCTION__
                __DATA__                                  编译日期
                __TIME__                                   编译时间
                __INCLUDE_LEVEL__           包含层数,从0开始
                __cplusplus                            是否为c++编译器,是c++编译器此宏为1,否则此宏无定义。
            8、环境变量
                C_INCLUDE_PATH           头文件搜索路径和CPATH等价(和-I选项作用一样,只是为了不用每次都使用-I选项配置的头文件路径)
                CPATH                                        头文件搜索路径
                CPLUS_INCLUDE_PATH       C++头文件的附加搜索路径
                LIBRARY_PATH                        链接时库文件搜索路径(和-L选项作用一样,只是为了不用每次都使用-L选项配置的库文件路径)
                LD_LIBRARY_PATH                运行时库文件搜索路径


        


        
            
            
            
            
            
            
            
            
            
            
            
            
            
            
            
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
0 0
原创粉丝点击