Unix系统高级编程-UC(15)
Unix系统函数为主-大量的Unix系统调用
Unix系统的原理-内存如何管理,进程如何设计……
培养大家的动手能力-能做一些有实际意义的软件(商业开发)
建议:
1.多动手,多写程序,为现在招工作更方便。
2.有机会一定提升自己的学历,最好28,29岁左右开始升研。
UC的主要内容:
1.Unix/Linux系统(了解)
2.C程序员的错误处理
3.Unix的内存管理
4.Unix进程管理
5.Unix文件处理和目录处理函数
6.Unix信号处理
7.进程间通信(IPC)
8.网络编程(socket)
9.多线程开发
其中,在day11和day15会有两个综合案例,需要大家完成
gcc编译器(区分大小写)
gcc -c:只编译不连接,生成.o文件
gcc -E:只做预处理,其他都不做
gcc -S:生成汇编文件
gcc -o:修改目标文件名
gcc : 编译+连接,生成可执行文件,默认是a.out
gcc -wall:生成所有的警告信息(提示代码质量,少警告)
c程序的过程(从hello.c到a.out):
1 预处理 -针对所有的指令(以#开头的),把指令换成纯c语法
2 编译 -检查一些错误,进行编译(狭义上的编译)
3 汇编 -把高级语言转换成汇编语言
4 连接-就是把所有的资源打包生成可执行文件
注:通常把预处理,编译和汇编通常为编译
计算机语言:机器语言-汇编语言-高级语言,咱们学的都是高级语言。
C程序员会写.c文件(源文件)和.h文件(头文件),各种声明和定义都写在头文件中,各种实现和赋值都是写在.c文件中
比如:全局变量的声明可以写在头文件中,函数的原型声明写在头文件中,结构的声明,宏的定义都写在头文件中;变量的赋值必须在源文件中,函数的实现(代码)必须在源文件中。
注:头文件中的内容迟早会被源文件所包含和使用,因此写在头文件中的内容都可以直接写在源文件中,头文件的意义在于可以被多个源文件同时使用
头文件一般都是按以下格式:
#ifndef 名字
#define 名字
……
#endif(防止多次导入头文件)
#pragma 可以给程序加一些额外的附加功能,介绍三种:
#pragma GCC dependdency 文件名
就是把当前的文件和指定文件之间建立依赖关系,如果当前文件最后修改时间比指定文件新,就没问题,否则就产生警告
现在基本都用版本控制软件解决时间问题
#pragma GCC poison 标识符或关键字
就是把后面的标识符或关键字禁止使用
#pragma pack(数字)
针对结构体的对齐补齐
每个操作系统都有环境变量,环境变量是一系列的变量,系统在启动时,会把一些常用的数据放入内存,其中有一部分就是环境变量。
程序运行的必备条件是:CPU负责运算,执行各种指令,但CPU不负责数据的存储,数据的存储是由内存或硬盘上的文件负责
CPU可以直接访问内存,但是不能直接访问硬盘上的文件,因此硬盘上的文件必须先进入内存(加载)后才能被程序使用
内存中的数据一旦关机就会消失(通常意义上的),而硬盘上的文件中的数据会永远存在。
常用的环境变量:
PATH -系统路径,一般情况下,文件都必须带上路径才有效,存在PATH中的的路径可以省略不写。
配置环境变量可以使用代码和命令实现,命令的实现:
在bash下,用命令:
export PATH=$PATH:.
就把.加入了PATH中。
可以使用echo $PATH查看当前环境变量PATH的值
想要永久生效,必须把export PATH=$PATH:.写入启动文件中,比如:/home/tarena/.bashrc
vi/home/tarena/.bashrc
Unix和Linux操作系统都是由内核和shell组成,直接操作内核不方便也不安全,shell就是用户和内核的沟通桥梁,用户操作shell,shell传递给内核完成功能。Unix系统常用的SHELL有以下三种:
shell -最早的SHELL,但是不是很好用(过时产品)
bash -是SHELL的增强版,目前应用最广
csh -是按c程序员的习惯写的SHELL
目前大家的机器都是bash,(echo $SHELL可以看到shell)
系统的头文件无需指定位置,自定义的头文件如何定位?
1 “./文件名”中加目录的方式可以找到,比如“../a/aa.h”
2 gcc 文件名 -I头文件所在的目录
3 配置环境变量CPATH,把头文件所在的目录放入CPATH(export CPATH=.)
Unix系统函数为主-大量的Unix系统调用
Unix系统的原理-内存如何管理,进程如何设计……
培养大家的动手能力-能做一些有实际意义的软件(商业开发)
建议:
1.多动手,多写程序,为现在招工作更方便。
2.有机会一定提升自己的学历,最好28,29岁左右开始升研。
UC的主要内容:
1.Unix/Linux系统(了解)
2.C程序员的错误处理
3.Unix的内存管理
4.Unix进程管理
5.Unix文件处理和目录处理函数
6.Unix信号处理
7.进程间通信(IPC)
8.网络编程(socket)
9.多线程开发
其中,在day11和day15会有两个综合案例,需要大家完成
gcc编译器(区分大小写)
gcc -c:只编译不连接,生成.o文件
gcc -E:只做预处理,其他都不做
gcc -S:生成汇编文件
gcc -o:修改目标文件名
gcc : 编译+连接,生成可执行文件,默认是a.out
gcc -wall:生成所有的警告信息(提示代码质量,少警告)
c程序的过程(从hello.c到a.out):
1 预处理 -针对所有的指令(以#开头的),把指令换成纯c语法
2 编译 -检查一些错误,进行编译(狭义上的编译)
3 汇编 -把高级语言转换成汇编语言
4 连接-就是把所有的资源打包生成可执行文件
注:通常把预处理,编译和汇编通常为编译
计算机语言:机器语言-汇编语言-高级语言,咱们学的都是高级语言。
C程序员会写.c文件(源文件)和.h文件(头文件),各种声明和定义都写在头文件中,各种实现和赋值都是写在.c文件中
比如:全局变量的声明可以写在头文件中,函数的原型声明写在头文件中,结构的声明,宏的定义都写在头文件中;变量的赋值必须在源文件中,函数的实现(代码)必须在源文件中。
注:头文件中的内容迟早会被源文件所包含和使用,因此写在头文件中的内容都可以直接写在源文件中,头文件的意义在于可以被多个源文件同时使用
头文件一般都是按以下格式:
#ifndef 名字
#define 名字
……
#endif(防止多次导入头文件)
#pragma 可以给程序加一些额外的附加功能,介绍三种:
#pragma GCC dependdency 文件名
就是把当前的文件和指定文件之间建立依赖关系,如果当前文件最后修改时间比指定文件新,就没问题,否则就产生警告
现在基本都用版本控制软件解决时间问题
#pragma GCC poison 标识符或关键字
就是把后面的标识符或关键字禁止使用
#pragma pack(数字)
针对结构体的对齐补齐
每个操作系统都有环境变量,环境变量是一系列的变量,系统在启动时,会把一些常用的数据放入内存,其中有一部分就是环境变量。
程序运行的必备条件是:CPU负责运算,执行各种指令,但CPU不负责数据的存储,数据的存储是由内存或硬盘上的文件负责
CPU可以直接访问内存,但是不能直接访问硬盘上的文件,因此硬盘上的文件必须先进入内存(加载)后才能被程序使用
内存中的数据一旦关机就会消失(通常意义上的),而硬盘上的文件中的数据会永远存在。
常用的环境变量:
PATH -系统路径,一般情况下,文件都必须带上路径才有效,存在PATH中的的路径可以省略不写。
配置环境变量可以使用代码和命令实现,命令的实现:
在bash下,用命令:
export PATH=$PATH:.
就把.加入了PATH中。
可以使用echo $PATH查看当前环境变量PATH的值
想要永久生效,必须把export PATH=$PATH:.写入启动文件中,比如:/home/tarena/.bashrc
vi/home/tarena/.bashrc
Unix和Linux操作系统都是由内核和shell组成,直接操作内核不方便也不安全,shell就是用户和内核的沟通桥梁,用户操作shell,shell传递给内核完成功能。Unix系统常用的SHELL有以下三种:
shell -最早的SHELL,但是不是很好用(过时产品)
bash -是SHELL的增强版,目前应用最广
csh -是按c程序员的习惯写的SHELL
目前大家的机器都是bash,(echo $SHELL可以看到shell)
系统的头文件无需指定位置,自定义的头文件如何定位?
1 “./文件名”中加目录的方式可以找到,比如“../a/aa.h”
2 gcc 文件名 -I头文件所在的目录
3 配置环境变量CPATH,把头文件所在的目录放入CPATH(export CPATH=.)