Linux环境编程——基础概念

程序员必备技能

一门编程语言:C语言、C++
数据结构与算法:表、树、图、查找、排序、STL
操作系统:UNIX、Linux系统
网络编程:TCP\IP(socket技术、TCP、UDP、FTP协议)
数据库:MySQL
界面设计:Qt

课程介绍

环境介绍
内存管理
文件管理
信号处理
进程管理
进程通信
线程管理
线程同步
网络编程

UNIX系统介绍

 BCPL->newB->C->UNIX->Minix->Linux->gcc最早版本诞生于1970年,属于美国贝尔实验室,作者丹尼斯·里奇和肯·汤普逊
 是最早的多用户、多任务、支持多种CPU架构、高安全性、高稳定性、高可靠性
 既能够构建大型关键业务系统的商用服务器、也能支持嵌入式设备

 Minix是一种基于微内核架构的类UNIN系统,并开放全部源代码给大学教学和研究工作,Linux之父林纳斯·托瓦兹正是受到Minix的启发,才开发了第一个版本的Linux系统

Linux系统介绍

 Linux,全称GNU/Linux,其内核由林纳斯·本纳第克特·托瓦兹于1991年首次发布。
 它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。
 Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

相关知识

 Linux的标志:小企鹅,因为企鹅是南极洲的标志性动物,而南极目前不被任何国家占有,属于全人类
 GNU组织:通用的、非商业的、类UNIX系统,目前全球最大的开源组织,负责Linux内核代码的升级
 GPL通用许可证:在带有GPL证书的代码的基础上开发出的软件,也必须支持GPL证书
 POSIX:可移植操作系统接口,Linux完全遵循该标准,UNIX也大部分遵循该标准,所以它们的命令、API接口基本上通用
 发行版:Linux只是内核,内核+shell+基础软件才是可用的操作系统
  由不同的公司依据Linux内核制作出不同发行版的Linux系统
  Ubuntu、redhat、CentOS、debian、deepin、UOS

GNU编译工具

多样性

支持各种编程语言、支持各种操作系统
gcc -v 查看版本信息

构建过程

预处理:gcc -E code.c -o code.i
编译: gcc -S code.i -> code.s
汇编: gcc -c code.s -> code.o
链接: gcc a.o b.o c.o … -> a.out

文件类型:

	.h      头文件
	.h.gch  头文件的编译结果,会被优先使用
	.c      源文件
	.i      预处理文件
	.s      汇编文件
	.o      目标文件
	.a      静态库文件
	.so     共享库文件

编译参数:

	-E      只预处理
	-S      只编译
	-c      只编译、不链接
	-o      设置编译结果的名字
	-std    设置语法标准
	-g      生成调试信息
	-Wall   尽可能多地产生警告
	-Werror 把警告当作错误处理
	-l      指定要加载的库文件名
	-I      指定头文件的加载路径
	-L      设置库文件的查找路径
	-D      编译时定义宏
	-On(1\2\3)  优化等级     
	-pedantic   以ANSI/ISO C标准列出的所有警告  -ansi   会对typeof产生警告

预处理指令:

#include <>/""  包含头文件
#define         定义宏常量、宏函数
       #           把标识符转换成字符串
       ##          拼接标识符
#ifdef          宏名存在条件为真
#ifndef         宏名不存在条件为真
#undef          删除宏
#if / #elif / #else / #endif    条件编译
        
#error  提示错误,并且能阻止生成可执行文件,一般与条件编译判断配合
#warning    提示警告
#line       设置行号,影响错误、警告提示的行号

#pragma pack (1\2\4)    内存对齐和补齐时的最大字节数
#pragma once    相当于头文件卫士
#pragma GCC dependency "filename"   监控文件
#pragma GCC poison key  设置关键字key为有毒的,禁止在代码中使用关键词key

  库文件就是目标文件的集合,可用被其它代码调用,把代码封装成库文件后方便调用、方便管理、安全性更高、保密性更好

静态库

 就是目标文件的集合,调用静态库就是把静态库中的二进制指令拷贝到可执行程序中
  优点:运行速度比共享库快,运行时不需要依赖静态库
  缺点:最终的可执行文件相对较大,当静态库修改后可执行文件必须要重新编译

共享库:

 就是带入口的可执行文件,调用共享库其实记录共享库中二进制指令在内存中的位置,当可执行文件执行时,共享库会被一起加载到内存中,可执行文件可以跳转到共享库中执行
  优点:可执行文件相对较小,当共享库修改后,可执行文件不需要重新编译
  缺点:运行速度比静态库慢,可执行文件运行时需要依赖共享库

静态库

制作静态库

1、编译出目标文件
gcc -c code.c …
2、打包目标文件生成静态库文件
ar -r libxxx.a a.o b.o c.o …
注意:库名格式必须是libxxx.a

使用静态库:

1、直接使用
  gcc code.c libxxx.a
2、指定库文件的位置
  -L 指定库的路径 -l 指定库名 【库民去掉前缀和后缀 -lxxx】
3、通过设置环境变量的方式来指定库的查找路径 -l指定库名
  打开配置文件:vim ~/.bashrc
  在配置文件末尾添加:export LIBRARY_PATH=$LIBRARY_PATH:路径
  保存退出并重新加载:source ~/.bashrc
注意:如果是删除环境变量,需要关闭终端、再打开
  直接使用静态库:gcc code.c -lxxx

共享库

制作共享库

1、编译生成目标文件
  gcc -fpic -c code.c
  pic:位置无关
2、生成共享库
  gcc -shared -fpic a.o b.o c.o … -o libxxx.so

使用共享库

1、直接使用
  gcc code.c libxxx.so
注意:失败是因为执行共享库时,默认的加载路径是/lib

2、指定库文件的位置
-L 指定库的路径 -l 指定库名 【库民去掉前缀和后缀 -lxxx】

3、通过设置环境变量的方式来指定库的查找路径 -l指定库名
  打开配置文件:vim ~/.bashrc
  在配置文件末尾添加:export LIBRARY_PATH=$LIBRARY_PATH:路径
  保存退出并重新加载:source ~/.bashrc
  gcc code.c -lxxx

注意:需要设置程序执行共享库的加载路径

  打开配置文件:vim ~/.bashrc
  在配置文件末尾添加:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:路径
  保存退出并重新加载:source ~/.bashrc
注意:当同名共享库与静态库同时存在时,编译器会优先使用共享库
  -static 编译参数,可以优先使用静态库

静态库和共享库的辅助工具

  ldd  查看可执行程序依赖哪些共享库 ldd ./a.out
  nm  查看目标文件、可执行文件、静态库、共享库中的符号列表
  strip  缩减,删除目标文件、可执行文件、静态库、共享库中的符号列表
  objdump  显示目标文件、可执行文件、静态库、共享库中的反汇编信息

环境变量表

  每个程序执行时操作系统都会给一张环境变量表,该表中记录了操作系统的所有的环境变量,这些环境变量反映了操作系统的配置、情况,以及当前操作系统所处的系统环境。

  声明 extern char** environ; 就可以直接使用该程序的环境变量表
注意:可以随意修改,因为只是操作系统提供的一个备份

操作环境变量表的函数

int setenv(const char *name, const char *value, int overwrite);
        功能:向环境变量表中添加、修改环境变量
        name:环境变量名
        value:环境变量的值
        overwrite:当环境变量存在时
                    为真则修改原来的环境变量的值
                    为假则不修改
        返回值:成功返回0,失败返回-1

int unsetenv(const char *name);
        功能:删除环境变量
        name:待删除的环境变量名
    
char *getenv(const char *name);
        功能:获取环境变量的值

int putenv(char *string);
        功能:以name = value 的格式修改或添加环境变量,如果已经存在则修改,不存在则添加
        返回值:成功返回0;失败返回-1

int cleanenv(void);
        功能:清空环境变量表

错误处理

1、通过函数的返回值表示错误
  a、合理值表示成功,非法值表示失败
    例如:计算大小、查找
  b、指针类型的返回值 NULL 或者 0xffffffff 表示失败
    例如:malloc、mmap、
  c、返回0表示成功,-1表示失败,一般都是系统函数
  d、永远成功 例如:printf
2、通过影响全局的错误编码 errno 定义在 errno.h 中

char *strerror(int errnum);
	功能:根据错误编码的值,获取详细的错误信息,通过返回值返回,记录到日志中,或者通过网络通信发送出去

注意:errno是一个全局变量,不能根据它的值就轻易判断是否产生错误

void perror(const char *s);
	功能:直接显示出系统错误原因
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux环境编程图文指南是一本详细介绍在Linux系统下进行编程的指南。它包含了图文并茂的内容,帮助读者理解和掌握Linux环境下的编程技巧和方法。 首先,该指南会介绍Linux系统的基本组成和架构,帮助读者了解Linux的工作原理和基本操作。它还会详细介绍如何在Linux系统上安装和配置开发环境,包括编译器、编辑器和调试工具的选择和设置。 其次,该指南会深入讲解Linux环境下的编程语言和工具。它会介绍C语言、Python和Shell脚本等常用的编程语言,并提供详细的语法和示例代码。此外,它还会介绍一些常用的开发工具和库,如GCC、Make、GDB和GTK+等,帮助读者更高效地进行编程和调试。 除了基本的编程技巧,该指南还会介绍Linux系统的特性和机制。它会介绍Linux的进程管理、文件系统和网络编程等相关内容,帮助读者深入理解Linux系统的工作原理,并能够针对特定需求进行系统级的编程和定制。 最后,该指南还会提供一些实际案例和示例项目,帮助读者将所学知识应用到实际的项目开发中。这些案例涵盖了网络应用、系统管理和嵌入式开发等不同领域,读者可以根据自己的兴趣和需求选择学习和实践。 总之,Linux环境编程图文指南为读者提供了一个全面而系统的学习资源,帮助他们在Linux系统下进行编程并取得成功。无论是初学者还是有一定经验的开发者,该指南都可以成为他们的参考和指导。 ### 回答2: Linux环境编程图文指南是一本介绍在Linux操作系统下进行编程的指南。本书旨在帮助读者从零基础开始学习Linux环境下的编程知识,并提供实用的例子和案例,帮助读者更好地理解和应用所学的知识。 首先,本书会介绍Linux操作系统的基础知识,包括Linux的发行版、命令行界面、文件系统结构等。读者可以逐步学习如何在Linux环境下进行基本的文件操作、目录管理和进程管理等。 接着,本书会详细介绍Linux下的编程环境和工具,如GCC编译器、GNU调试器、Makefile等。读者可以学习如何配置和使用这些工具来进行程序的开发、编译和调试。 同时,本书还会介绍各种编程语言在Linux环境下的应用,如C、C++、Python、Shell等。读者可以学习这些语言的基本语法和特性,并了解如何在Linux环境下使用这些语言编写各种类型的程序。 在实际编程方面,本书将提供大量的实例和案例,涵盖了各种不同的应用场景,如网络编程、多线程编程、系统编程等。读者可以通过这些实例和案例的学习和实践,掌握不同类型的编程技巧和方法。 最后,本书还会介绍一些常用的软件开发工具和技术,如版本控制系统(如Git)、协作开发工具(如GitHub)、自动化测试工具等。读者可以了解和应用这些工具和技术,提高编程效率和代码质量。 总而言之,Linux环境编程图文指南是一本全面介绍在Linux操作系统下进行编程的指南。通过阅读本书,读者可以系统地学习和掌握在Linux环境下的编程知识和技能,为自己的编程之路打下坚实的基础。 ### 回答3: Linux环境编程是一种在Linux操作系统下进行软件开发和编程的技术。它提供了一个强大的开发环境,可以满足各种不同的编程需求。 首先,我们需要熟悉Linux操作系统的基本命令和操作。这些包括文件和目录的创建、删除、复制、移动等操作,以及文件权限、用户管理等基本概念。掌握这些基础知识将有助于我们更好地理解和使用Linux环境。 其次,我们需要选择一个适合的集成开发环境(IDE)或文本编辑器。常用的IDE包括Eclipse、NetBeans和Code::Blocks,它们提供了强大的代码编辑、调试和项目管理功能,可以提高开发效率。另外,对于轻量级编程任务,使用文本编辑器(如Vim或Emacs)也是不错的选择。 接下来,我们需要具备编程语言的基本知识。在Linux环境下,常用的编程语言包括C、C++、Java、Python等。我们需要学习这些语言的语法、数据结构、算法等基础知识,以便能够编写出高效、可靠的程序。 在编写程序时,我们可以利用Linux环境提供的各种工具和库。例如,我们可以使用gcc编译器来编译C和C++程序,使用Java虚拟机(JVM)来运行Java程序。此外,Linux环境还提供了丰富的库,如GNU C库(glibc)、GTK+和Qt等,它们能够帮助我们进行图形界面开发、网络编程等任务。 最后,我们还需要学会使用调试工具来调试程序。在Linux环境下,我们可以使用gdb来进行源代码级别的调试,它提供了诸如设置断点、查看变量、追踪函数调用等功能,帮助我们定位和修复程序中的错误。 总之,掌握Linux环境编程需要建立在对Linux操作系统的基本了解和掌握的基础上,并结合相应的编程语言和工具。只有理论和实践相结合,才能真正掌握这一技能,并在实际项目中得到应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值