精华内容
下载资源
问答
  • 全国计算机等级考试 三级 Linux 应用与开发技术考试大纲(2021年版) 有需要的话,免费自取 已通过 3 月份考试
  • 三级Linux应用与开发技术考试大纲(2021年版).pdf
  • https://blog.csdn.net/qq_42025798/article/details/119517073 20.第15章-Linux系统的应用程序-练习题 https://blog.csdn.net/qq_42025798/article/details/119517120 21.第16章-Web服务器搭建、应用开发与部署-...

    1.考试说明

    https://blog.csdn.net/qq_42025798/article/details/119155437

    2.第1章-计算机体系结构与操作系统-练习题-选择题

    https://blog.csdn.net/qq_42025798/article/details/119155696

    3.第1章-计算机体系结构与操作系统-练习题-简答题

    https://blog.csdn.net/qq_42025798/article/details/119186151

    4.第1章-计算机体系结构与操作系统-练习题-填空题

    https://blog.csdn.net/qq_42025798/article/details/119184852

    5.第2章-Linux系统概述-练习题

    https://blog.csdn.net/qq_42025798/article/details/119187266

    6.第3章-Linux系统使用基础-练习题

    https://blog.csdn.net/qq_42025798/article/details/119187752

    7.第4章-shell脚本编程基础-练习题

    https://blog.csdn.net/qq_42025798/article/details/119189148

    8.第5章-用户管理-练习题

    https://blog.csdn.net/qq_42025798/article/details/119206014

    9.第6章-文件管理-练习题

    https://blog.csdn.net/qq_42025798/article/details/119206989

    10.第7章-进程管理-练习题

    https://blog.csdn.net/qq_42025798/article/details/119336128

    11.第8章-存储管理-练习题

    https://blog.csdn.net/qq_42025798/article/details/119361611

    12.第9章-设备管理-练习题

    https://blog.csdn.net/qq_42025798/article/details/119391915

    13.第10章-网络管理-练习题-选择题

    https://blog.csdn.net/qq_42025798/article/details/119410746

    14.第10章-网络管理-练习题-填空题

    https://blog.csdn.net/qq_42025798/article/details/119410778

    15.第10章-网络管理-练习题-简答题

    https://blog.csdn.net/qq_42025798/article/details/119415282

    16.第11章-系统服务与日志-练习题

    https://blog.csdn.net/qq_42025798/article/details/119448128

    17.第12章-Vi编辑器-练习题

    https://blog.csdn.net/qq_42025798/article/details/119480793

    18.第13章-Emacs编辑器-练习题

    https://blog.csdn.net/qq_42025798/article/details/119510377

    19.第14章-安装openSSH-练习题

    https://blog.csdn.net/qq_42025798/article/details/119517073

    20.第15章-Linux系统的应用程序-练习题

    https://blog.csdn.net/qq_42025798/article/details/119517120

    21.第16章-Web服务器搭建、应用开发与部署-练习题

    https://blog.csdn.net/qq_42025798/article/details/119517141

    持续更新!







    注意:如果题目有问题可以私信博主哦!记录成长,记录学习!

    展开全文
  • LINUX应用开发技术详解 里的全部源代码....
  • Linux应用开发入门

    万次阅读 2017-02-09 15:45:33
    然而,情况并不是这样的,从程序库的支持方面,Linux平台为用户级应用程序的开发提供了很多功能强大且丰富的程序库,而且它们大部分是跨平台的(Boost、OpenGL、STL、Qt、Java等)和基于POSIX标准的(glibc等),...
    

    前一阵子在QQ上和朋友聊天的时候,总会看到有人说Linux上的应用程序开发是高手才可以完成的,而且这种“迷信”在目前似乎还很普遍。然而,情况并不是这样的,从程序库的支持方面,Linux平台为用户级应用程序的开发提供了很多功能强大且丰富的程序库,而且它们大部分是跨平台的(BoostOpenGLSTLQtJava等)和基于POSIX标准的(glibc等),同时Linux内核还为驱动程序的开发提供了功能完备的内核接口,从开发工具方面,Linux提供了功能强大的编译器GCC和调试器GDB,借助它们的帮助,我们可以很轻松的在Linu x上开发出可移植性的应用程序。既然如此,“迷信”又源于何来呢?我想,一方面由于详细介绍Linux各种开发的书籍较少,各种Linux应用在国内仍不普及,另一方面则是由于很多人在安装好一个Linux后,苦于找不到一个得心应手的IDE环境,从而感到不知所措,毕竟,我们很多人都习惯了写好程序后,按下F5,剩下的任务就让IDE全权代理了。其实想在Linux下如此这般当然也没问题。既然说到了IDE,就让我们从它开始吧,相信选择一个好的IDE环境是你整个学习过程的一个不错的开始。

     

    工欲善其事 必先利其器——IDE

    其实Linux下有许多功能强大的IDE环境,因为从某种意义上说,Linux是专为开发者准备的操作系统,这个东西当然少不了,在这里为读者介绍一些比较常用的IDE

    KDevelop

    这是一个用Qt开发的IDE,其主要支持的语言是C / C++

    Eclipse

    近年来,eclipse可以说发展极为迅速,它不仅是一个以java为主的开发平台,其功能强大的插件体系结构使得它可以被当作各种应用程序来使用。作为各种插件的载体,eclipse提供了完整的GUI接口,用户完全可以借助eclipse来只关心自己想做的工作。

    Emacs

    VIM

     

    山高月晓 水落石出——IDE后台的故事 GCC

    前面我们简要介绍了一些IDE环境,其中所有C/C++相关程序的编译都是由GCC来完成的,而IDE只不过起到了一个收集编译信息和为我们的项目生成makefile等作用(后面我们会提到)。出于目前Linux开发的特点,C仍是系统开发的主流语言。所以,对GCC有一个全面的了解是很有必要的,一旦IDE不能满足你的需求,我们要有手工打造程序的能力,而且出于学习的目的,我们往往不需要IDE生成的那些复杂的文件,为一个Hello world生成2M多的文件显然是多余的。

    GCC的全称是GNU Compiler Collection,从这个名字我们不难看出,GCC代表着一个编译器的集合,目前GCC可以支持C, C++, Objective-C, Objective-C++, Fortran, Java, and Ada等语言。但是出于一般性考虑,我们这里只讨论GCC中的C/C++部分。

    目前GCC的最新发布版是4.0.0,但是这个版本由于使用了新技术和新的编码规范,很多旧的代码都需要修改才可以通过编译,所以并不推荐使用这个版本。而相对稳定的新版本目前是3.4.4,大家可以到GNU的主页上更新下载。那么究竟GCC强大在哪里,如何使用?下面我就通过几个简单而实际的例子带你看看GCC提供的强大功能。

     

    通过Helloworld的编译熟悉GCC的基本使用方法

    似乎为所有新语言提供一个Hello World样本程序已经成为了一种不成文的标准,人们通过它来认识语言的一些基本要素。在这里,我们使用一个Hello World来看看如何用GCC生成可执行文件。

    把上面的文件存成helloworld.c,之后打开控制台,输入如下的命令

    gcc helloworld.c –o helloworld

    如果一切正常的话,你的控制台上应该没有任何输出。用ls查看你的工作目录,你会发现目录下多了一个名为helloworld的可执行文件,之后,执行

    ./hellworld

    就会看到这个程序的输出了

    很简单不是吗?但是学过计算机的朋友都应该知道,程序的编译过程要分为下图所示的过程而GCC的强大之处就在于它允许你在上面所示的任何一个过程中停下来查看中间结果,并对其加以控制。

    1. 预处理

    首先是预处理过程,GCC-E选项可以让GCC在预处理后停止编译,并向标准输出打印预处理过后的文件。下面的-o用于指定输出文件的文件名。

    gcc –E hellowrold.c –o helloworld.cpp

    下面是helloworld.cpp的一部分的内容,我们看到,文件已经包含了stdio.h中的内容。

    如果我们想执行下一步的编译过程,可以继续使用GCC-x <language type>选项,该选项用于显示指定文件的后缀名(而不是让编译器根据后缀来自行判断)。我们比较常用的language type有如下几种,(如果读者想获得更为完整参数说名,请参考GCC manual)

    l         c c-header c-cpp-output

    l         c++ c++-header c++-cpp-output

    l         assembler assembler-with-cpp

    另外,下表列出了常用的GCC后缀名

    文件后缀

    注释

    .c

    需要经过预处理的C代码文件

    .i

    不需要经过预处理的C代码文件

    .ii

    不需要经过预处理的C++代码文件

    .h

    需要被预编译的C, C++, Objective-C头文件

    .cc .cp .cxx .cpp .CPP .c++ .C

    需要被预处理的C++程序文件

    .hh .H

    需要被预编译的C++头文件

    .s

    汇编代码文件

    .S

    需要被预处理的汇编文件

     

    当然,你也可以省略掉language type的部分,这时候GCC会根据文件的后缀名自行判断,就像你没有使用该选项一样。

    下面继续我们的编译过程

    2. 编译

    如果我们想获得编译后的源文件可以使用-S选项,该选项让gcc只执行编译(生成汇编文件)而不进行汇编(生成目标文件),此时,我们可以用-o选项指定输出的汇编文件的名称。

    gcc –S helloworld.cpp –o hellowrld.S

    3. 汇编

    另外,我们还可以使用GCC-c选项来编译和汇编源文件而不链接,此时-o指定的输出文件就是编译后的目标文件名

    gcc –x c++ -c helloworld.cpp –o helloworld.o

    4. 链接

    最后,我们可以利用GCC来把我们刚才生成的.o文件链接成可执行程序

    gcc helloworld.o –o helloworld

    这一次,我们使用了-o选项指定了可执行文件名,也就是说,根据输入文件类型的不同,-o有着不同的含义。

    5. 函数库的链接和包含文件

    对于我们编写的任和一个程序,没有库函数的支持是不可想象的,而当我们要使用的头文件和函数库不在GCC默认的搜索路径下的时候(例如OpenGLQtKDEBoost等),我们就需要手工来告诉GCC他们的位置。

    先来看头文件路径的指定。我们可以利用-I<dir_name>来指定我们希望GCC去搜索的头文件目录,例如我们要使用X11的程序,我们就要使用下面的选项

    再来看库函数的设置:我们通过-L<dir_name>-l<lib_name>两个命令行选项完成任务。其中-L用于告诉GCC<dir_name>中去寻找函数库,而-l选项则告诉GCC使用用户指定的程序库。在Linux中,函数库的命名是遵循UNIX约定的,即lib{lib name},例如libsocket.so,所以当你需要告诉GCC使用这些库的时候,你就可以使用-lsocket选项。通常,这两个命令是结合在一起使用的,例如引用X11程序库的时候,我们可以这样:

    –L/usr/X11R6/lib –lX11

    另外,GCC在默认情况下使用共享库来链接程序,而当你想链接静态库的时候,一定要使用-static选项,例如-lncurses -static

    在这一部分的最后,我们对编译时用到的GCC常用命令做一个简要的总结

    命令

    说明

    -x <language type>

    显示指定输入文件的格式

    -c

    编译和汇编源文件,但不链接,输出为.o文件格式

    -S

    编译源文件,但不汇编,输出为.S文件格式

    -E

    只对源文件进行预处理,并不编译,输出为经过预处理的源代码

    我们可以利用上面的-x-c / –S / –E的组合来控制GCC的整个编译过程,其中-x用于告诉GCC我们从哪里开始,而-c / -S / -E用来告诉GCC在那里结束。

    -o output-file

    用来指定输出文件,该选项可以指定很多种输出文件,例如:可执行文件、目标文件、汇编文件或者是预处理过的程序代码等,这要根据具体的命令行参数而定。当然,GCC还提供了默认的-o选项,其中,默认的可执行文件是a.out,目标文件是<file_name>.o,汇编文件是<file_name>.s,预编译头文件的格式是<file_name>.suffix.gch

    -I<dir name>

    告诉GCC<dir name>中去寻找头文件

    -L<dir name>

    告诉GCC<dir name>中去寻找库文件

    -l<lib name>

    使用名为lib<lib name>.so的程序库

    -static

    通知GCC链接静态库

     

    上面,我们提到了关于GCC编译的常用命令,这里另外补充一些帮助性的常用命令,他们可以让你对GCC的基本配置和使用作一个了解。

    命令

    说明

    -v

    向标准错误打印编译GCC时使用的命令和预处理器和编译器的编本,如果你在升级GCC时举棋不定,那么不妨在你的控制台上使用这个选项,看看厂商的配置

    --help

    向标准输出打印GCC命令行选项的描述。如果把这个命令和-v结合起来,--help则会同时打印被GCC调用的进程的命令行描述。如果把-Wextra—help结合起来,那么,那些没有文档描述的命令行选项也会被显示出来。

    --target-help

    向标准输出打印每一个工具的特定命令行选项的描述

    --version

    现实GCC的版本和版权信息

     

    在这部分的最后,我们来谈一谈关于构建软件时链接参数的设定问题。在上面的第5部分我们已经提到了,函数库的使用是需要-L-l一起配合来使用的,但实际上,往往一个像样的程序需要很多库的支持,例如,如果你需要编写一个GTK程序,我们需要下面的链接参数:

    -L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 –lm,看上去有些吓人,你可能会问,我如何知道需要这些呢,如果我想编写KDE的程序呢,还有OpenGL呢?其实,情况比你想象的要好很多,在/usr/bin目录下,有很多名为xxx-config的脚本,它们的作用就是向用户显示编译链接程序时使用的参数的。这些脚本可以接受一些参数,比较常用的有—libs用于列出链接特定程序时使用的程序库,另外--cflags用于生成头文件的包含目录,也就是上面我们提到的-I参数。于是,对于GTK程序,我们可以使用下面的命令来编译:

    gcc gtksource.c `gtk-config –libs --cflags`

    当然,为每一种程序写一个config显然不是一个好办法,目前新的开发包都使用pkg-config这个脚本来生成链接参数。你可以使用pkg-config –list-all查看pkg-config支持的所有链接参数

    当你在上面这份列表中查到了自己想要程序包时,就可以使用下面的命令来编译程序了

    gcc <source file>.suffix `pkg-config <pkg name> --libs --cflags`

     

    GCC帮助你更好的工作

    上面我们简单介绍了GCC的常用命令行选项,其实GCC的功能比上面提到的那些要丰富得多,GCC对代码的警告、优化、调试等方面提供了丰富的支持,下面我们就从一些例子来看看GCC提供的这些功能。

    1. 对问题代码提出警告

    GCC对程序代码提供了完整的检查功能,由于C/C++语言本身的特点,很多错误都是程序员无意间犯下的,例如使用了未定义的变量、在bool表达式中使用了=而不是==等等问题,利用GCC提供的代码检查功能,我们可以让编译器为我们找到这些问题,避免运行时发生灾难。

    首先,我们来看一个“问题代码”

    /* test_warning.c We use this file to check the warning facilities provided by GCC*/

    #include <stdio.h>

    #include <stdlib.h>

     

    void main() {        /* main should return int*/

        int a, b;

        long long l = 2.2; /* long long type is GNU extension, not standard ANSI / ISO type*/

        miss_decl();    /* We call an undeclared function*/

        if (a = 0)       /* May be we want == here instead of =*/

            printf (“a really equals to 0?/n”);

        if (b != 0)      /* We used uninitialized variables*/

            /* %d and “We should put b here” don’t match*/

    printf(“We make a mistake again! b = %d/n”, “We should put b here”);

    };

     

    void miss_decl() {

        /* /* This type of annotation is prohibited*/

        printf(“We should put the declaration before it’s been used!/n”);

    }

    上面这些代码故意制造了很多编程中出现的常见问题,接下来,我们就用这段代码来检测一下GCC提供的各种常用的警告设施。

    首先,我们不使用任何警告设施编译上面的程序

    gcc test_warning.c –o test_warning

    默认情况下,GCC会给出输出,其中GCC识别出了main函数不标准(warning)以及使用了未声明的函数(error)两个问题,但是其他的GCC并未察觉。

    1.  利用-pedantic找出不符合ANSI / ISO标准的代码

    执行下面的命令:gcc –pedantic test_warning.c –o test_warning

    可以看到,这次GCC以警告的形式报告了代码中long long的使用,但是要说明的是我们并不能依赖这个选项来保证我们的代码完全符合ANSI / ISO标准,因为该选项只报告ANSI C要求编译器进行检察的内容。另外,你还可以使用-pedantic-errorsGCC把所有的警告都变成错误。

    2. 利用-Wformat检查printf中的参数不匹配问题

    执行下面的命令:gcc –Wformat test_warning.c –o test_warning

    3. 利用-WComment找出注释中的错误

    执行下面的命令:gcc –WComment test_warning.c –o test_warning

    4. 利用-Wparentheses查找bool表达式中的=错误

    执行下面的命令:gcc –Wparentheses test_warning.c –o test_warning

    5. -Wuninitialized查找未初始化变量的使用

    执行下面的命令:gcc –O –Wuninitialized test_warning.c –o test_warning

    值得说明的是,在使用这个选项的时候,一定要配合上-O(后面我们会提到)选项

    6. 利用-Wimplicit-function-declaration / -Werror-implicit-function-declaration检查未声明函数的使用

    执行下面的命令:gcc -Wimplicit-function-declaration test_warning.c –o test_warning

    另外-Werror-implicit-function-declaration-Wimplicit-function-declaration作用是类似的,只是如果你使用了未声明的函数,前者会把它认为是一个错误。

    7. 如果你只是想对你的代码进行全面的检查,你大可不必把上面的选项一并列出来,GCC提供了-Wall选项,含义就是列出所有代码中的警告

    执行下面的命令:gcc –Wall test_warning.c –o test_warning

    8. 如果你想走另一个极端,也就是不想让gcc输出任何警告,那么使用-w选项,该选项禁止所有的警告

    执行下面的命令:gcc –w test_warning.c –o test_warnin

    <输出结果>

    对于上面所有的选项,你都可以把它们和-Werror选项一起使用,这样就可以把所有的警告都变成错误。另外,如果你只是想对代码进行检查而并不执行编译的话,可使用-fsyntax-only选项,像下面的命令这样

    gcc –fsyntax-only test_warning.c

    基本上来说,我们常用的一些警告选项就是这些,而其中-Wall更是我们极为常用的功能。

     

    2. 优化选项

    这一部分的内容可以分成两部分,一部分是让编译器对代码进行分析后,进行的代码优化,另一部分是我们可以为编译器制定一些关于硬件的信息,让他生成对硬件结合的更好的代码,而我们之所以要用源代码来编译程序,很多情况下,是出于这方面的原因。

    首先来看代码优化,从代码的整体优化上,GCC提供了下面的选项

    -O –O1

    这两个选项的含义是一样的,GCC将执行减少代码尺寸和执行时间的优化,对于那些会严重影响编译时间的优化选项,这个级别的优化并不会执行。

    -O2

    在这一级别GCC将会提供所有支持的优化,但这其中并不包括以空间换时间的优化手段,例如编译器不会使用循环展开和函数内联。和-O相比,该选项进一步加快了编译时间和生成代码的性能。

    -O3

    除了-O2提供的优化选项外,还指定了-finline-functions-funswitch-loops-fgcse-afer-reload选项,目的只有一个就是全力执行代码优化。

    -Os

    这个选项是专门用来优化代码尺寸的,-Os打开了所有-O2级别中不会显著增长代码尺寸的优化选项

    -O0

    该选项代表不执行优化

    在这里要说明的是,尽管GCC提供了1~3s4个整体优化选项,但从实际的优化效果上来看,往往O3优化出来的程序的效率并不是最高的,而大部分情况下我们都在使用-O2,如果你希望获得最高的效率利益,那么不妨这4个选项都试试。另外,其实这些选项只不过是GCC提供的很多单方面优化的一个组合,如果你想了解更为具体的优化内容,可以去查看GCC手册,出于篇幅限制,这里不细谈了。最后要记住的一点是,如果你的程序是用于高精度数值计算的,那么记住不要使用上面任何的优化选项。

    下面来看基于硬件优化,由于这部分和计算机硬件相关,这里仅用IntelCPU做一些说明:

    对于所有为IntelAMD x86-64提供的优化选项都是用m开头的,下面写一些常用的选项:

    -march

    该选项用来指定CPU的类型,常用的有i386 / i486 / i586 / pentium-mmx / i686 / pentium2 / pentium3 / pentium-m / pentium4 / prescott / k6 / athlon / athlon-4 / k8等等,读者可以根据自己的情况进行指定。

    -mfpmath

    该选项用于指定浮点运算单元的类型。包括

    387

    使用标准的数学协处理器

    sse

    使用SSE指令集提供的标量浮点运算。在Pentium3 / Athlon-4以及更新的芯片上支持这个特性。另外,在pentium4以及AMD x86-64处理器上,SSE2还可以进行双精度浮点计算。

    sse,387

    混合使用387数学协处理器和SSE指令集,该选项可以充分的利用CPU的浮点寄存器和xmm寄存器,但是该选项还处在试验阶段。

    -malign-double

        该选项使得GCCdouble / long double / long long类型的变量在4字节或2字节地址上对齐,

        Pentium级的CPU上,这会使得代码的执行速度更快,当然带来的代价是需要更多的内存来执行程序。-mmmx –msse –msse2 –msse3 –m3dnow

    这些选项用来启动内置函数直接使用这些处理器扩展指令的功能。在编译3D或多媒体程序的时候,使用他们是非常有效的。

     

    3. 对调试的支持

        当程序出错的时候,我们可以在Visual Studio中轻松的进行调试,而在Linux中,一旦出现Segmentation Fault,似乎我们除了用眼睛去看代码就没有更好的选择了,其实情况不然,用GCC向程序加入一些适当的调试信息,我们可以利用GDB去调试程序。在这里,我们介绍最为常用的-g-ggdb选项。

        先来看-g。该选项可以利用操作系统的“原生格式(native format)”生成调试信息。GDB可以直接利用这个信息。尽管我们可以把-O-g放在一起使用,但是,这种做法是极为不推荐的。

        如果你想用GDB来调试程序,那么你可以使用-ggdb来让GCCGDB生成更为丰富的调试信息,但是,此时你就不能用其他的调试器来进行调试了。

        最后要说明的是,上面这两个选项都可以接受一个输出调试信息的级别,默认的级别是2。如果你指定1级(-g1),那么GCC会生成最少的调试信息,这包括函数和全局变量的描述信息,但是对于局部变量和行号等信息,在这个级别是不会输出的。另外一个级别是3级(-g3),在这一级别上,GCC会为程序中的所有宏定义和符号生成调试信息。

     

    小结

        通过这篇文章,希望能过对想学习Linux开发中用到的一些基本的技术和知识有一个了解,并且能够自己动手开始做些试验性的工作,其实,这里还有很多问题没有谈到,例如利用GDB进行调试、利用make管理工程、利用autoconf为程序生成配置脚本、利用CVS管理程序源文件等等,这些问题有待在今后的文章中和读者一起交流。

    展开全文
  • 2020年计算机等级考试中新增了Linux系统应用与开发,可见Linux越来越重要了。这是计算机三级Linux系统应用与开发教程中的习题答案,对参加计算机三级等级考试的人有帮助哦。
  • 实用技术开发Linux应用——用GTK+和GDK开发Linux图形用户界面应用 [美】 Eric Harlow 著 童寿彬 等 译 电子工业出版社
  • Linux应用开发自学之路

    万次阅读 多人点赞 2018-06-09 21:33:27
    在 「关于我 」那篇博文里,朋友们应该知道了我不是科班出身,是由机械强行转行到Linux应用开发方向。下面我就详细向大家介绍自己这一路上的转行历程,希望对大家有所启发。   我是学机械专业的,对于机械专业我...

     

    前言

     

     

     

     

    在 「关于我 」那篇博文里,朋友们应该知道了我不是科班出身,是由机械强行转行到Linux应用开发方向。下面我就详细向大家介绍自己这一路上的转行历程,希望对大家有所启发。

     

    我是学机械专业的,对于机械专业我还是很感兴趣,而且当年这个专业也是我自己选择的。本科时成绩没排第一,但也排专业前列。硕士时成绩一直是专业第一,还拿过国家奖学金。由此可见,我还是挺热爱机械的,考研时甚至还想去中科院深造(可惜落榜了),想成为一名机械砖家。

     

     

    转折点

     

     

     

    但转机在我毕业之后。本来我就想一直踏踏实实的做机械,但阴差阳错的,第一份工作由机械工程师调剂到电子工程师。虽然是电子工程师,但做了很多代码工作,那时候学了一些Verilog,以及C#,并且用C#开发了一个测试工具及一个生产用的上位机,据说那个测试工具现在还在电子部门使用。也就是那时,我真正接触到了编程,并深深的被编程世界所着迷。

     

    可是,我在学校学的是机械啊,跟软件相关的东西顶多是C语言及汇编语言,但C语言是十年前(那时候)学的,早就还给老师了。因此,为了工作的需要,我硬着头皮开始学习编程。我每天早上6点起床,学习一个小时后7点去赶班车,晚上下班回来再继续学习。在这样的条件下我学会了Verilog及C#,同时对STM32有个大概的了解。

     

    但那个岗位毕竟不是完全做软件工作,还需要做电子方面的工作。做软件的都知道,写代码的时候需要一个不被打扰的环境,而我那个岗位,一天可以接到十几个电话,严重干扰我的软件开发进度,因此,我决定离开公司,去做真正的软件工程师。

     

     

    入门

     

     

     

    第二份工作,我是嵌入式工程师。在去公司之前,我系统的学了一遍51,看的是 「郭天祥十天学会51单片机」,对单片机有个初步的入门。真正入职后,再利用一个月的时间系统学习一遍C语言,看的是C语言之父写的 「C程序设计语言」。这本书虽然写于80年代,但现在看来依然不过时。而且这本书比较薄,容易看完,比较有成就感。

     

    看完 「C程序设计语言」之后,最好再看 「C和指针」 ,「C专家编程」,「C陷阱与缺陷」。这三本书号称「C语言三剑客」 ,学完它们你的C语言水平绝对是非常之高了。做我们这行,C语言是基础语言,一定要把C语言完全拿下。

     

    之后为了工作的需要,开始接触了Marvell 88MC200及88MW300。这两款是WIFI芯片,但本质是单片机,采用的是ARM M3内核。底层驱动已经由厂家写好了,我们要做的工作就是在SDK基础上做应用做二次开发。在这个过程中,我对敏捷开发有了初步的认识,看了 「高效程序员的45个习惯:敏捷开发修炼之道」这本书。

     

    在第二家公司里,我知道了物联网的整体解决方案,对于物联网的整体框架有了更深入的了解。同时对嵌入式开发所需的技能有了全面的掌握,达到能够独立做一个物联网项目的水平。当然,期间还学会了版本控制工具git,看的是 「Pro Git」及 「git权威指南」。同时再进一步系统学习了STM32,看的书是野火的 「STM32库开发实战指南」,但看的视频却是正点原子的。这里强烈推荐正点原子的视频,真的是做的非常好。

     

    由于我是转行,我自知底子薄,起点比别人落后很多,因此我很刻苦学习。我就住在公司附近,公司8点上班,我依然6点起床,12点睡觉。平时没事的时候就在公司学习,看代码,写代码,调代码,甚至好几个周末也是在公司度过。为了转行我一心扑在了学习上,放弃了一切娱乐活动,只为能赶上同事一点半点。这个状态一直持续了我在这个公司的整个过程。

     

     

    新挑战

     

     

     

    可惜,一年之后我不得不离开了,因为我老婆在广州,我去广州追随我老婆了。由于我面试时的不错表现,以及我不错的英语口语,我顺利的被广州一家外资世界500强录用。我的新岗位是Linux应用开发工程师,使用C++开发。而在那时,我既不会Linux,也不会C++,所以公司敢录用我真的是勇气可嘉。

     

    从单片机到Linux又是一个比较大的跨度。Linux主要有三个方向:运维、应用、底层,而我选择的是应用方向。为了工作的需要,我必须先拿下C++。好在公司是外企,几乎不加班,于是我有充足的时间学习。可是,每天坐班车的时间加起来有三个小时,这么好的时间我不能浪费啊,于是,我买了个iPad,下载一套视频,在班车上也进行学习。当然,我也注意保护眼睛,在班车上绝不看书,看视频的时候也经常往窗外看看。

     

    这里讲讲自学过程中是采用看书还是看视频的方式。我采用的是先看视频再看书的方式。为什么要这样?因为我个人觉得,很多技术书都是很厚的一本,自己看下来要花费很多时间精力,而且很多知识点在工作中很少会用到,可以暂时先略过的。视频一般会比较短,一般是几天就能看完,而且老师一般只挑重点的讲。我们时间都很宝贵,我建议先把老师讲的知识完全掌握了以后,再利用书籍进一步扩展其它知识。但是,不管是看书还是看视频,一定要写代码,一定要写代码,一定要写代码,否则非常容易造成眼高手低!!

     

    我这家公司里我依然保持着早上6点起床,晚上11点睡觉的习惯。这样早上有1个小时,晚上3个小时,班车上3个小时,一天总共有7个小时可以用于学习。而周末我会睡个懒觉,7点起床,依然11点睡觉,周末几乎不出门,所以周末又有大量的时间可以用来学习。

     

    C++实在是太难了,我用了一个多月才将视频里的知识完全拿下来。之后,在工作中,陆续开始看「C++ Primer」 进一步巩固。其它书籍推荐:「Effective C++」,「C++语言的设计与演化」,「C++ 标准程序库」。在stackoverflow上有个C++必读书单,可以去看看。

     

    学完C++我再学习了Linux系统编程,同样采用的是先视频后书籍的方式进行。不管是视频还是书籍,一定要看最经典的。市面上有太多良莠不齐的视频和书籍,如果选择了一个质量不好的材料来看,不仅会浪费很多时间,而且有可能还会被误导。对于视频的选择,可以去各大培训机构,里面通常有一些免费视频资料供我们下载。

     

    对于Linux应用的学习,主要有六部分:1. 环境搭建;2. 基本操作;3. 系统编程;4. 网络编程;5. 数据库编程,6. Shell编程。下面一一详细介绍。

     

    1. 环境搭建

    作为Linux工程师,毋庸置疑一定需要Linux环境。对于Linux环境的获取,我们通常有两种方式:

    • 将电脑整体安装为Linux系统;

    • 在电脑里安装一个虚拟机,跑Linux电脑;

    • Window+Linux双系统。

    得到Linux环境后还不够,还要知道如何配置、如何远程连接Linux电脑、如何与Linux电脑互传文件、如何在主机上阅读Linux电脑中的代码,等等。

     

    2. 基本操作

    众所周知,Linux很少或几乎没有界面,所有的操作几乎都可以通过命令行来完成。对于运维人员来说,需要掌握相当大量的Linux命令。而对于应用、驱动方向的人员来说,只需掌握一些基本的常用的命令即可。对于这部分很多人建议看 「鸟哥的私房菜」 ,但我觉得这个更适合运维人员,我们无需掌握那么多命令。

     

    3. 系统编程

    在学系统编程之前,一定要先学习Makefile,这会为后续的学习提高很大效率。之后的系统编程,主要有几大块:IO编程、进程、线程、进程间通讯(包括管道、信号、信号量、共享内存等)。这几部分学完了,基本也就差不多了。

     

    4. 网络编程

    网络编程主要就是socket,poll,epoll,以及对TCP/IP的理解,同时要学会高并发式服务器的编写。

     

    5. 数据库编程

    数据库的内容其实并不属于Linux,但在项目中经常要用到。这部分主要要学会数据库的基本操作,以及如何写一套接口去操作数据库。

     

    6. Shell编程

    Shell是Linux下的脚本语言,功能虽然不如高级语言强大,但它可能做很多事,在某些场合甚至比高级语言要方便得多。当然除了Shell脚本,还有Python脚本。

     

    Linux应用编程书籍推荐:

    • UNIX环境高级编程。简称APUE,号称程序员的圣经。它不是一本API字典,它还讲述了很多操作系统的细节,内存,文件系统等方面,是一本难得的好书。但是它起点有点高,不适合初学者。

    • Linux程序设计。如果觉得APUE有点难入门的话,可以选择此书进行入门。

    • Unix/Linux系统编程手册。这本书号称是一本超越APUE的书,它是一本比较新的书,里面新增了APUE所没有的Linux/Unix新特性。而且对于一些概念性的东西讲的确实比APUE好。但至于能否超载APUE,还有待历史的考验。

    • UNIX 网络编程。也是一本非常经典的书,主要是网络编程方向的。

    • MySQL必知必会。本书在Amazon上长期排在数据库销售榜首,建议想快速了解数据库原理和MySQL的新手阅读。快餐性质,简洁明快,小开本,而且很薄,比较好阅读。

    • Linux Shell脚本攻略。这本书很薄很精华,它追求的不是全,而是精,所以用它来入门再适合不过了。

     

    学完以上六部分,基本就有能力完成Linux环境下的应用编程了。当然,在有些场合我们可能还需要用到Python脚本。像我公司的项目部分脚本就是用Python完成的。对于Python的入门,可以参考 「简明Python教程」。但如果想进一步提高的话,那就需要阅读大量书籍了。对于Linux层级的脚本应用,掌握一些基础的足够了。

     

    以上就是我的Linux应用开发自学之路,虽然我离高手还有很长的距离,但我还是将自己的这段自学经历分享出来,希望能够帮助朋友们少走一些弯路,同时也期待和高手一起学习、提高。好了,今天的分享就至此为止。

    ---------------

    我是良许,世界500强外企 Linux 开发工程师,专业生产 Linux 干货。欢迎关注我的公众号「良许Linux」,回复「1024」获取最新最全的技术资料,回复「入群」进入高手如云技术交流群。

     

     

     

     

    展开全文
  • 嵌入式Linux应用开发完全手册.pdf

    热门讨论 2013-02-17 16:18:23
    《嵌入式Linux应用开发完全手册》全面介绍了嵌入式Linux系统开发过程中,从底层系统支持到上层GUI应用的方方面面,内容涵盖Linux操作系统的安装及相关工具的使用、配置,嵌入式编程所需要的基础知识(交叉编译工具的...
  • 本人从事嵌入式软件开发多年,结合自己的经验,推出了《嵌入式软件工程师技术面专题》,预计会有40篇,分成硬件协议、多进程多线程编程、网络编程、linux基础、C/C++等几大模块,每一篇在末尾都总结了相关提问,其中...
  • 《从实践中学嵌入式Linux应用程序开发》 内容简介: 《从实践中学嵌入式linux应用程序开发》结合大量实例,讲解了嵌入式linux应用程序设计各个方面的基本方法及必要的核心概念。主要内容包括搭建嵌入式linux开发...
  • 嵌入式linux应用开发完全手册 第2版面市

    千次阅读 多人点赞 2020-11-16 19:07:18
    嵌入式linux应用开发完全手册>>,虽然有些内容过时了,但丝毫不影响它的销量。 10多年来陆陆续续有太多人希望我们对这本书进行更新,刚好最近正在录升级版嵌入式视频,全新的学习方式,适配多款主流开发板,...
  • 基于ARM和嵌入式Linux开发环境 Qtopia Core编程基础 命令行截屏工具 简单的时钟程序 拼图小游戏 嵌入式桌面管理器 嵌入式数据库 嵌入式Web服务器 嵌入式Linux调试技术 嵌入式Linux性能优化
  • 基于ARM的嵌入式Linux应用程序开发

    千次阅读 2017-02-09 16:36:44
    而嵌入式Linux系统也蓬勃发展,不仅继承了Linux源码开放、内核稳定高效、软件丰富等优势,还具备支持广泛处理器结构和硬件平台、占有空间小、成本低廉、结构紧凑等特点。 1 ARM处理器及开发板  在嵌入式领域,...
  • 于此,将框架(Framework)和设计模式(Design Pattern)应用Linux驱动开发,说明了如何以面向对象、设计模式和框架概念来看待Linux驱动程序的架构。其直接的益处就是:让我们能基于一致的设计理念来结合Android HAL...
  • 本书全面介绍了嵌入式linux系统开发过程中,从底层系统支持到上层gui应用的方方面面,内容涵盖linux操作系统的安装及相关工具的使用、配置,嵌入式编程所需要的基础知识(交叉编译工具的选项设置、makefile语法、arm...
  •  《嵌入式Linux应用程序开发标准教程(第2版)》可作为高等院校电子类、电气类、控制类等专业高年级本科生、研究生学习嵌入式Linux的教材,也可供希望转入嵌入式领域的科研和工程技术人员参考使用,还可作为嵌入式...
  • 一般企业级的开发环境中,会有配备Linux操作系统的远程服务器,作为软件系统开发运行平台。通常开发者通过本地机器远程连接至该平台从事开发、编译执行程序工作。但是对于在校或者暂时没有这样环境的普通开发学习者...
  • Linux应用领域

    千次阅读 2017-02-10 22:55:58
    (1)linux应用于后台服务器,yongyu网站开发, (2)嵌入式领域,andorid,ios系统底层都是linux , (3) linux windows 区别 1:Linux区分大小写 2:Linux中一切皆文件 3:linux 不区分扩展名,压根没有扩展名...
  • 用Java快速开发Linux GUI应用

    千次阅读 2006-03-29 13:53:00
    而Java语言是一种极具潜力的多平台应用软件开发工具,在Linux平台上用Java开发GUI应用技术目前国内仍极少使用。本文将对该方法的细节、特点及其意义作详细论述。关键词:Linux、开放源代码、GUI、Java、组件、容器...
  • linux应用开发完全手册》核心笔记(全)

    万次阅读 多人点赞 2017-05-06 23:04:45
    开发环境构建】 1. 开发环境搭建:操作系统或虚拟机Ubuntu安装、网络服务配置、工具安装等 工具资源:https://pan.baidu.com/s/1bpakJtP // 不定期更新 步骤整理:http://blog.csdn.net/sinat
  • 从嵌入式linux到android应用开发

    千次阅读 多人点赞 2016-04-25 22:03:55
    在离职期间也有很多领导说做android应用有什么好的,门槛不高,随便一个人都可以去做,而嵌入式linux却不然,不是一般人随随便便就可以进入这个行业的,而自己4年多的嵌入式linux经验也可以在这个行业混得不错了,却...
  • Linux C++服务器端开发技术

    千次阅读 2012-02-14 10:01:53
    Linux C++服务器端开发技术 1、基本知识:掌握C/C++语法,熟悉STL标准库、ACE库、Boost库。 2、应用技能:多线程编程、网络编程、Oralce数据库、内存管理、正则表达式。 3、内功修炼:算法数据结构、...
  • 华清远见嵌入式Linux应用开发

    千次阅读 2010-04-16 15:41:00
     ◆ 《嵌入式Linux应用开发班培训讲义》 ◆ 《嵌入式 Linux应用程序开发标准教程》第2版  华清远见教材编写组 编著    班级规模及环境  为了保证培训效果,增加互动...
  • Linux之ARM/Linux与单片机开发差异

    千次阅读 2015-12-14 22:15:46
    随着嵌入式技术的发展,ARM在各领域的应用也越来越广泛。课内近期也开始了ARM-Linux开发项目,采用的是飞思卡尔的iMX53,该芯片以ARM-Cortex ... 本文旨在帮助从单片机开发转向ARM-Linux开发技术人员更加快速的熟悉A
  • 嵌入式Linux开发应用优势

    千次阅读 2004-10-14 15:22:00
    嵌入式Linux开发应用优势http://www.sina.com.cn 2002/01/22 18:56 赛迪网-中国计算机报由于嵌入式Linux具有天生秉承的优势,越来越多的企业和科研机构已经把目光转向了嵌入式Linux开发应用上。归纳而言,...
  • 将于6月15日(周六)下午1:30-5:00,在北京翠宫饭举办一场开源Linux开发经验及典型应用案例分享讲座,培训讲座中将通过三个专题众多开源Linux技术爱好者一起分享嵌入式Linux及Android开发的高级应用进阶技术,以...
  • Linux应用场景

    千次阅读 2016-10-13 20:58:55
    Linux将不会取代Windows成为主流的桌面操作环境, 但它很有可能在信息接入设备中独霸天下。 为什么Lin

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 322,746
精华内容 129,098
关键字:

linux应用与开发技术

linux 订阅