zoukankan      html  css  js  c++  java
  • Linux学习笔记一 Linux基础知识认知以及初识Linux下C编程入门


     

                                                                                             本文原创 ,转载必须注明出处 :http://blog.csdn.net/qinjuning

          

              从今天开始,下定决心一步一步开始步入Linux殿堂,重新拾起Linux学习时,依然记得大学时代对Linux的囫囵学习,

       劲头持续不了几天,就消亡在她那迷惑的外衣下。如今处于对Android系统的究极学习,以及其他很多目的,下定决心把Linux

       知识掌握好。

     

          本学习笔记素材来源 :

               1、《鸟哥的Linux私房菜_基础学习篇》(电子档)

               2、 两篇博文对Linux下C编程gcc命令的认知

                        Linux下C语言编程--基础知识     以及    Linux下的C编程实战

     

     

        一 、Linux 操作系统来源 

                 大家懂得,省略…..

        

        二、Linux基本知识

                   说明: 相关截图来自鸟哥那本书,目前我还没好好消化吸收 。还得继续加把劲。

     

            1、 Linnux 命令行介绍

     

           

        例如,我们常见的列出当前目录的文件/文件夹的基本命令为:    ls  –al  main

               说明: ls      为一个command

                          –al    为options  a 表示列出隐藏文件 ;  l 表示 列出文件/文件下的详细信息

                         main  为 parameter1   表示仅仅列出以“main“ 开头的文件/文件夹

     

        其他常用的命令包括:

             ls    列出当前目录的所有文件/文件夹信息

             data  列出当前时间日期

             cd   切换路径

     

          当然了,这么多command---命令超多并且每个用法超多,我们当然不可能如此记得,因此最强大的一个指令就是 man

      指令了。 该命令的用法如下:

                           man command  

            即可 , 知晓该command的所有用法了 。

     

          2、Linux文件属性说明:

                  进入Linux后,在任何一目录 键入如下命令 ls -al  (该命令的意思是:详细列出所有文件和文件夹的信息) , 可以看到

         如下信息,加上了说明信息:    

       

        相关属性说明:

               第一列表达的信息是最重要的了, 图解如下:

      

     

              属性详细说明为:

     

                            

     

     

                其他的属性相对而言就比较好理解了。

     

            3、Linux下一些重要目录说明

                    一些比较重要的目录有:

                            

     

                          

     

                        

     

                           

     

                        

     

     

    三 、 Linux下C编程入门

              熟悉了Windows下编程的同学,初次接触Linux下C编程可能很不习惯,因为Linux并没有为我们提供集成开发环境IDE,

       例如Windows下的 VC,Visual Studio 等 。但是在Linux下C编程,能给你带来不一样的感受,它可以让你熟悉编译器如何生成

       可执行文件的各个步骤等。

           一般来说,生成一个可执行文件需要以下两步:

              1、编译:即编译源文件 ,生成目标文件

              2 、链接:即将相关的目标文件链接起来,生成一个最终可以执行的可执行文件。(在Windows中,命名一般以.exe结束 ;

                Linux下,则以文件属性-x来标记)

     

             最后,执行该可执行文件即可看到程序输出了。

            再次强调的一点是,关于程序编译的一些规范和方法,一般来说,无论是C、C++、还是pas,首先要把源文件编译成中间

      代码文件,在Windows下也就是 .obj 文件,UNIX下是 .o 文件,即 Object File,这个动作叫做编译(compile)。然后再把

      大量的Object File合成执行文件,这个动作叫作链接(link)。

            总结一下,源文件首先会生成中间目标文件,再由中间目标文件生成执行文件。在编译时,编译器只检测程序语法,和函  

        数、变量是否被声明。如果函数未被声明,编译器会给出一个警告,但可以生成Object File。而在链接程序时,链接器会在所有

        的Object File中找寻函数的实现,如果找不到,那到就会报链接错误码(Linker Error),在VC下,这种错误一般是:Link 2001

        错误,意思说是说,链接器未能找到函数的实现。你需要指定函数的Object File.

     

      Linux下C编译器利剑GCC 命令初步认知

         GCC编译器是Linux平台下最重要的开发工具,它是GNU的C和C++编译器,其基本用法为:

                gcc [options] [filenames]

            说明:为了下述表达方便,假定存在如下一个简单的C源文件, helloword.c   

    1. /** 
    2.   name      hellword.c   
    3.   @author  qinjuning 
    4. */  
    5.   
    6. int main()  
    7. {  
    8.     printf("Hello World"n");  
    9.     return 0 ;  
    10. }  

        

         最简单的编译方法是 gcc  hellowrold.c 它会为目标程序生成默认的文件名a.out,直接执行该可执行文件,即可看到输出 。

         例如 在shell中输入以下命令:

                First Step :  gcc  helloworld.c   ↙ (即输入回车键)        Result :即可生成a.out 可执行文件

                Second     :   ./a.out                                                     Result  : 执行该文件,即可看到程序输出 。

          options为编译选项,GCC总共提供的编译选项超过100个,但只有少数几个会被频繁使用,我们仅对几个常用选项进行介绍。

     

        -o  含义:生成目标文件并且为指定生成的目标文件命名 ,

                   例如:  gcc –o  helloworld   helloworld.c     那么生成的可执行文件为 hello ,而不是a.out

     

        -c  含义: -c选项告诉GCC仅把源代码编译为目标代码而跳过汇编和连接的步骤,默认生成文件名为 [file_name].o 。

               PS:  由于头文件以及引用关系, 我们同样要利用gcc –o  命令为了对相关目标文件进行编译,以便生成一个可执行文件。

     

    假设存在如下源代码,包含了主文件和头文件等

     

        主文件:  main.c

    1. <span style="font-family:Microsoft YaHei;font-size:16px;"></span><pre class="cpp" name="code">/* main.c */  
    2. #include <stdio.h>  
    3.   
    4. #include "first_1.h"  
    5. #include "first_2.h"  
    6. int main()  
    7. {  
    8.     printf_str("This is my first linux c")  ;  
    9.     print_to_num(10) ;  
    10.     return 0 ;  
    11. }  
    
    

       两个头文件 

    1. <span style="font-size:16px;">/*printf_1.h */  
    2. #ifnde  _FIRST_H_  
    3. #define _FIRST_H_  
    4.    void printf_str(char *str);  
    5. #endif  
    6.   
    7. /*printf_2.h */  
    8.   
    9. #ifnde  _SECOND_H_  
    10. #define _FIRST_H_  
    11.    void print_to_num(int num);  
    12. #endif  
    13. </span>  

       

      真正函数实现的源文件

    1. <span style="font-size:16px;">/*printf_1.c */  
    2.   
    3. #include <stdio.h>  
    4. #include "first_1.h"  
    5. void printf_str(char *str)  
    6. {  
    7.     printf("%s  . I am com" , str);  
    8. }  
    9.   
    10. /*printf_2.c */  
    11. #include <stdio.h>  
    12. #include "first_2.h"  
    13. void print_to_num(int value)  
    14. {  
    15.     int i = 0 ;  
    16.     for( ;i < value ;i++)  
    17.        printf("cur value is %d ##\n" , i);  
    18. }  </span>  



        编译步骤如下:

              1 、 编译:对不同的源文件生成目标文件(xxx.0)

                      gcc  -c   main.c               ↙         生成 main.o  目标文件

                      gcc  -c   printf_1.c           ↙         生成 printf_1.o 目标文件

                      gcc  -c   printf_2.c           ↙         生成 printf_2.o 目标文件

             2、 链接:将相关的目标文件链接起来,并形成可执行文件

                     gcc  -c  main   main.o  printf_1.0   printf_2.o             ↙   即可生成可执行文件main

             3、 输入 ./main  即可执行该文件并可看到我们程序结果

       关于GCC的更多命令和调试方法,请参考如下两篇博客:

                    1、Linux下C语言编程--基础知识
                     2、Linux下的C编程实战

                     

  • 相关阅读:
    Centos 6.5 Install Mysql 8.0.0
    Django根据现有数据库建立/更新model
    Python之路【第十七篇】:Django【进阶篇 】
    Django之Model操作
    Django之Form组件
    Appium+python自动化获取toast消息(windows版)的方法
    'sudo'不是内部或外部命令,,,,的解决办法
    LookupError: unknown encoding: cp65001解决方案
    进程和线程(5)-分布式进程
    进程和线程(4)-进程 vs. 线程
  • 原文地址:https://www.cnblogs.com/wanqieddy/p/2484530.html
Copyright © 2011-2022 走看看