Day21、Unix开始:操作系统基础、gcc的一些应用、标准C库函数及帮助
2016-08-25 21:49
316 查看
前期学的是 标C
之后学 UC
Linux C vi 编辑器 gcc编译器
Windows C vc++ 6.0 IDE集成环境
开发C语言的运行环境是unix操作系统
软件分为系统软件和应用软件
什么是操作系统?
1、 是一款系统软件
2、 管理硬件
3、 是用来管理软件资源的一款系统软件
操作系统的模块:
1、 内存管理
2、 文件管理
3、 文件系统管理
4、 进程管理
5、 线程管理
6、 用户管理
7、 网络管理
8、 信号管理
操作系统:windows | unixlinux macos ios android
Shell是用户和操作系统的交互窗口,也是一款软件
学习的环境用的是bash
用户在bash提供的交互窗口下输入命令,然后由bash将命令中需要操作系统帮助的部分交给操作系统完成,完成后将结果通过bash输出给用户
标准C库 : 仓库里存放着C语言的函数,有时也叫函数库
fopen fclose fread fwrite malloc
System call :系统调用,本质也是函数
Open close read write
寻求帮助的方式:
man 1 command linux命令
man 2 system call 系统调用(函数)的帮助
man 3 malloc 标C的帮助
- rw - r- -r- -
-rw- r- - r- -
用户权限(开发人员) 同组人员权限 其他人员
Linux下行业标准:
一个程序正确的执行完毕,返回值为0 ,错误的返回值为非0.
最基本的框架:
1int main(void){
2 return 0;
3 }
./a.out 没有结果 echo $? 显示0
echo $? :显示上一个命令执行的返回值
框架 组件 (主函数就是一个框架 ,printf函数就是框架中的一个组件)
strace ./a.out
Linux是什么?Linux的历史 ?
unix的一些情况:
1970年诞生的操作系统,汇编语言写的,C语言重写
GNU是什么?
基于unix系统调用写了一些应用程序 vi gccbash…
GNU项目组织,开发应用程序,因为Unix系统的局限性,就从应用软件来完善,不修改系统
Posix C 标准
Linux :发起编写Linux操作系统内核的组织,通过互联网,遵循posix C 标准
GUN / linux :操作系统
《GNU宣言》
计算机语言的发展:
计算机只有二进制 1 0
机器指令----汇编语言,对汇编语言再进行封装,形成C语言的关键字
#include<stdio.h>
int main(){
printf("hello world\n");
return 0;
}
gcc编译器的使用
实例说明:hello.c
第一步:编译理过程 在编译前对源文件进行预先处理
预处理指令:1、宏定义 2、文件包含 3 条件编译
所有以#(sharp)开头的叫做预处理过程,在编译前起作用
输入指令gcc –E hello.c –o hello.i ,生成hello.i
第二步:编译过程 从源文件到汇编语言
输入指令 gcc –S hello.i (–o hello.s),
或者gcc –S hello.c –o hello.s,
生成 hello.s
第三步:汇编过程 将汇编语言翻译成机器指令(机器语言),生成可执行文件
gcc –c hello.s
gcc –c hello.i
gcc –c hello.c
生成hello.o
file命令的使用: file 文件名 查看该文件的类型
第四步:链接 将目标文件和和标准库链接,生成可执行文件
gcc hello.o–o hello 形成hello可执行文件
实验:
tarena@tarena-virtual-machine:~/day21$ ls
hello.c
tarena@tarena-virtual-machine:~/day21$ gcc-E hello.c -o hello.i
tarena@tarena-virtual-machine:~/day21$ ls
hello.c hello.i
tarena@tarena-virtual-machine:~/day21$ gcc-S hello.i
tarena@tarena-virtual-machine:~/day21$ ls
hello.c hello.i hello.s
tarena@tarena-virtual-machine:~/day21$ gcc-c hello.s
tarena@tarena-virtual-machine:~/day21$ ls
hello.c hello.i hello.o hello.s
tarena@tarena-virtual-machine:~/day21$ gcchello.o -o hello
tarena@tarena-virtual-machine:~/day21$ ls
hello hello.c hello.i hello.o hello.s
tarena@tarena-virtual-machine:~/day21$./hello
hello world
gcc –vhello.c :-v参数就是将程序从.c文件到可执行文件的这个编译过程全部显示在屏幕上
#include<> :到系统指定的路径下找头文件,如果找不到,报错。如果找到,就把头文件复制粘贴到程序目前的位置。
#include“ ” :从当前路径下找头文件,如果没找到,然后到系统指定的路径下去找这个头文件,如果还没找到就报错。
系统指定路径: gcc –v hello.c
#include "..." 搜索从这里开始:
#include <...> 搜索从这里开始:
/usr/lib/gcc/i686-linux-gnu/4.6/include
/usr/local/include
/usr/lib/gcc/i686-linux-gnu/4.6/include-fixed
/usr/include/i386-linux-gnu
/usr/include
.o库文件:
/usr/lib/gcc/i686-linux-gnu/4.6/crtend.o
crtbegin.o /i386-linux-gnu/crtn.o
#include <stdio.h>
末尾为什么不加分号?因为不是C语句,是一条预处理指令,不参与编译。
预处理指令的补充:
在预处理阶段预处理指令发挥作用
#单词 预处理指令
1)宏定义: 只是简单的替换
2)预处理阶段将注释信息全部清楚
3)文件包含
// 指令:mv 文件名 路径 例: mv hello.c ..
// sudo命令 :将用户的身份临时切换到root用户,执行该命令完毕,身份自动切换回原用户的身份
4)条件编译
# if 条件
printf ( “hello world”);
#else
printf(“ 123456”);
#endif
#ifndef 宏名 //安全卫士 头文件卫士作用:防止重复包含
…….
#define 宏名
#endif
小结:
操作系统
GNU项目 基于unix系统调用编写应用程序 遵循posix C标准
Linux是一款操作系统内核 遵循了posix C 标准
现在所谓说的linux系统,其实是GUN / linux操作系统
用户应用程序、内核程序
标准C库函数和系统调用,寻求帮助的方式
gcc的一些应用
-E 预处理
-S 编译成汇编语言
-c 汇编成机器语言
.o目标文件与标准库文件链接生成可执行文件
扩展名:
.c 源文件 .h头文件 .s汇编文件 .i预处理后的文件 .o.目标文件
预处理过程
链接过程明天学习
作业:
编写一个函数,实现字符串的拷贝,不允许利用库函数 strcpy()
使用strcpy的原型 man strcpy
char *tstycpy ( char *dest , const char*src)
以后着重了解每个函数的原型!!!!
之后学 UC
Linux C vi 编辑器 gcc编译器
Windows C vc++ 6.0 IDE集成环境
开发C语言的运行环境是unix操作系统
软件分为系统软件和应用软件
什么是操作系统?
1、 是一款系统软件
2、 管理硬件
3、 是用来管理软件资源的一款系统软件
操作系统的模块:
1、 内存管理
2、 文件管理
3、 文件系统管理
4、 进程管理
5、 线程管理
6、 用户管理
7、 网络管理
8、 信号管理
操作系统:windows | unixlinux macos ios android
Shell是用户和操作系统的交互窗口,也是一款软件
学习的环境用的是bash
用户在bash提供的交互窗口下输入命令,然后由bash将命令中需要操作系统帮助的部分交给操作系统完成,完成后将结果通过bash输出给用户
标准C库 : 仓库里存放着C语言的函数,有时也叫函数库
fopen fclose fread fwrite malloc
System call :系统调用,本质也是函数
Open close read write
寻求帮助的方式:
man 1 command linux命令
man 2 system call 系统调用(函数)的帮助
man 3 malloc 标C的帮助
- rw - r- -r- -
-rw- r- - r- -
用户权限(开发人员) 同组人员权限 其他人员
Linux下行业标准:
一个程序正确的执行完毕,返回值为0 ,错误的返回值为非0.
最基本的框架:
1int main(void){
2 return 0;
3 }
./a.out 没有结果 echo $? 显示0
echo $? :显示上一个命令执行的返回值
框架 组件 (主函数就是一个框架 ,printf函数就是框架中的一个组件)
strace ./a.out
Linux是什么?Linux的历史 ?
unix的一些情况:
1970年诞生的操作系统,汇编语言写的,C语言重写
GNU是什么?
基于unix系统调用写了一些应用程序 vi gccbash…
GNU项目组织,开发应用程序,因为Unix系统的局限性,就从应用软件来完善,不修改系统
Posix C 标准
Linux :发起编写Linux操作系统内核的组织,通过互联网,遵循posix C 标准
GUN / linux :操作系统
《GNU宣言》
计算机语言的发展:
计算机只有二进制 1 0
机器指令----汇编语言,对汇编语言再进行封装,形成C语言的关键字
#include<stdio.h>
int main(){
printf("hello world\n");
return 0;
}
gcc编译器的使用
实例说明:hello.c
第一步:编译理过程 在编译前对源文件进行预先处理
预处理指令:1、宏定义 2、文件包含 3 条件编译
所有以#(sharp)开头的叫做预处理过程,在编译前起作用
输入指令gcc –E hello.c –o hello.i ,生成hello.i
第二步:编译过程 从源文件到汇编语言
输入指令 gcc –S hello.i (–o hello.s),
或者gcc –S hello.c –o hello.s,
生成 hello.s
第三步:汇编过程 将汇编语言翻译成机器指令(机器语言),生成可执行文件
gcc –c hello.s
gcc –c hello.i
gcc –c hello.c
生成hello.o
file命令的使用: file 文件名 查看该文件的类型
第四步:链接 将目标文件和和标准库链接,生成可执行文件
gcc hello.o–o hello 形成hello可执行文件
实验:
tarena@tarena-virtual-machine:~/day21$ ls
hello.c
tarena@tarena-virtual-machine:~/day21$ gcc-E hello.c -o hello.i
tarena@tarena-virtual-machine:~/day21$ ls
hello.c hello.i
tarena@tarena-virtual-machine:~/day21$ gcc-S hello.i
tarena@tarena-virtual-machine:~/day21$ ls
hello.c hello.i hello.s
tarena@tarena-virtual-machine:~/day21$ gcc-c hello.s
tarena@tarena-virtual-machine:~/day21$ ls
hello.c hello.i hello.o hello.s
tarena@tarena-virtual-machine:~/day21$ gcchello.o -o hello
tarena@tarena-virtual-machine:~/day21$ ls
hello hello.c hello.i hello.o hello.s
tarena@tarena-virtual-machine:~/day21$./hello
hello world
gcc –vhello.c :-v参数就是将程序从.c文件到可执行文件的这个编译过程全部显示在屏幕上
#include<> :到系统指定的路径下找头文件,如果找不到,报错。如果找到,就把头文件复制粘贴到程序目前的位置。
#include“ ” :从当前路径下找头文件,如果没找到,然后到系统指定的路径下去找这个头文件,如果还没找到就报错。
系统指定路径: gcc –v hello.c
#include "..." 搜索从这里开始:
#include <...> 搜索从这里开始:
/usr/lib/gcc/i686-linux-gnu/4.6/include
/usr/local/include
/usr/lib/gcc/i686-linux-gnu/4.6/include-fixed
/usr/include/i386-linux-gnu
/usr/include
.o库文件:
/usr/lib/gcc/i686-linux-gnu/4.6/crtend.o
crtbegin.o /i386-linux-gnu/crtn.o
#include <stdio.h>
末尾为什么不加分号?因为不是C语句,是一条预处理指令,不参与编译。
预处理指令的补充:
在预处理阶段预处理指令发挥作用
#单词 预处理指令
1)宏定义: 只是简单的替换
2)预处理阶段将注释信息全部清楚
3)文件包含
// 指令:mv 文件名 路径 例: mv hello.c ..
// sudo命令 :将用户的身份临时切换到root用户,执行该命令完毕,身份自动切换回原用户的身份
4)条件编译
# if 条件
printf ( “hello world”);
#else
printf(“ 123456”);
#endif
#ifndef 宏名 //安全卫士 头文件卫士作用:防止重复包含
…….
#define 宏名
#endif
小结:
操作系统
GNU项目 基于unix系统调用编写应用程序 遵循posix C标准
Linux是一款操作系统内核 遵循了posix C 标准
现在所谓说的linux系统,其实是GUN / linux操作系统
用户应用程序、内核程序
标准C库函数和系统调用,寻求帮助的方式
gcc的一些应用
-E 预处理
-S 编译成汇编语言
-c 汇编成机器语言
.o目标文件与标准库文件链接生成可执行文件
扩展名:
.c 源文件 .h头文件 .s汇编文件 .i预处理后的文件 .o.目标文件
预处理过程
链接过程明天学习
作业:
编写一个函数,实现字符串的拷贝,不允许利用库函数 strcpy()
使用strcpy的原型 man strcpy
char *tstycpy ( char *dest , const char*src)
以后着重了解每个函数的原型!!!!
相关文章推荐
- 公布一些常用的WebServices,希望对大家的应用有帮助~
- 公布一些常用的WebServices,希望对大家的应用有帮助
- 3724:unix纪元——标准库时间函数的应用
- 学习OPENCV书中一些函数的应用
- unix环境下的文件操作的一些函数open()、close()、read()、write()、dup()、fsync()sync()函数
- Access 一些内部函数(Access 帮助里)
- avr-gcc中关于delay延时函数的应用修改版[ourdev]
- APUE读书笔记-02UNIX标准和实现-05一些限制
- 【转】php编程中一些技巧函数的应用
- avr-gcc中关于delay延时函数的应用(原发于2007-11-16)
- 公布一些常用的WebServices,希望对大家的应用有帮助
- jquery live 函数使用的一个例子,和一些帮助文档
- 公布一些常用的WebServices,希望对大家的应用有帮助(转帖)
- 3724:unix纪元——标准库时间函数的应用
- 使用Microsoft.VisualStudio.QualityTools.WebTestFramework.dll中一些函数帮助分析Html(some fuctions in Microsoft.VisualStudio.QualityTools.WebTestFramework.dll help to analyze HTML)
- 【散分】公布一些常用的WebServices,希望对大家的应用有帮助
- 使用Linux/Unix GCC 的一些感觉
- 一起学习Silverlight企业应用2:开始使用Silverlight,以及一些基本概念
- 难点总结:Jquery动态加载数据库中的数据(解答人:郭哲 方式:讲述jquery原理及一些函数的使用方法,学会看帮助文档)
- gcc 一些应用