Linux c语言

Posted 子羽丿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux c语言相关的知识,希望对你有一定的参考价值。

统一声明:
博客转载 声 明 : 本博客部分内容来源于网络、书籍、及各类手册。
        内容宗旨为方便查询、总结备份、开源分享。
        部分转载内容均有注明出处,如有侵权请联系博客告知并删除,谢谢!

百度云盘提取码:统一提取码: ziyu

C语言源码下载地址:https://download.csdn.net/download/qq_43498137/22171766
可见本文末尾 代码案例详情!

一、Linux基础

1.1、Linux环境搭建

1.4.1、Linux环境搭建

如果没有Linux环境先安装虚拟机和Ubuntu

转载 最新超详细VMware虚拟机下载与安装 链接:https://blog.csdn.net/qq_40950957/article/details/80467513

转载 VMware虚拟机安装Linux系统(详解版) 链接:http://c.biancheng.net/view/714.html

Ubuntu系统 下载 链接:https://cn.ubuntu.com/download

Ubuntu低版本可能不能上网下载,可以推荐我配置好的 Ubuntu 64_20.04 可上网高版本,直接解压打开使用VM打开即可。

Ubuntu 64_20.04 阿里云链接:https://www.aliyundrive.com/s/DWUDBP5KZsU
Ubuntu 64_20.04 百度云链接:https://pan.baidu.com/s/1OEYYSHQ1eTVJE-iHjWb7WQ

1.2、Linux基础

打开ubuntu
普通用户:farsight   密码:1
超级用户:root       密码:1

/:根目录
~:家目录    == /home/farsight

$:命令提示符  普通用户   #超级用户

打开终端:
直接点击图标 terminal
快捷键:ctl+alt+t  			//打开新终端
右键:open terminal			//再打开
     ctrl+shift+n			//打开
	 ctrl+shift+t			//并列打开,打开一个标签
	 
调节字体:ctrl+shift++//调大字体
          ctrl+-//调小字体

1.3、终端命令

终端命令:
pwd:显示当前所在的路径
ls :查看当前目录下的文件
   ls -a:显示隐藏文件  
   ls -l:显示目录的详细信息
  drwxrwxr-x 11 farsight farsight  4096 Jul 31  2020 desktop
  d:目录文件,文件夹 
  rwx rwx r-x:文件权限
  11 :文件的硬链接数
  farsight:用户组名
  farsight:用户名
  4096:文件大小  以 字节为单位
  Jul 31  2020:文件创建时间
  desktop:文件名
  
  clear :清屏操作    快捷键:ctl+‘l’
  
  mkdir+文件名  :创建一个新的目录文件
  mkdir -p:递归创建
  
  cd   :跳转
    .  :当前目录
	.. :上级目录

  touch:创建一个普通文件,一般加后缀
        更新时间戳

  mv 文件名1  文件名2  //将文件重命名为文件名2 
  mv 文件名1  路径  //移动文件到路径下
  文件路径不同,起到移动的作用,文件名在移动后的路径下没有,文件路径相同,重命名

  rm:删除普通文件
    -r:删除目录文件
  mdir:安全删除空文件,非空时警告

  man 手册
  man 1:普通命令
  man 2:系统调用
  man 3:库函数

 绝对路径:从根目录出发,一直到指定的目录
 相对路径:相对于当前位置

 gedit  test//类似于文本文档

 cat:查看文件内容
   -b:加行号显示
   -s:合并多空行

 cp 文件名1 文件名2 //复制普通文件1到文件2
    -r 文件名1 文件名2//复制目录文件1到目录文件2
练习:
1、用相对路径的方式,切换到上一级的上一级目录
cd ./../../      cd ..  cd ..
2、用绝对路径的方式,切换到根目录下的usr下的include目录
cd /usr/include
3、在家目录下创建一个school,再在该目录下创建两个目录 class1  class2
mkdir -p school/class1 school/class2
4、在class1中创建两个普通的文件
touch day1.txt test.txt

二、vi编辑器

2.1、vi编辑器

vi编辑器:
刚进入时在命令行模式下:
进入插入模式(进行编辑):
i o a I O A
i:从光标的当前位置开始编辑
a:从光标的后一个位置开始编辑
o:从光标的后一行位置开始编辑
I:从光标当行 第一个位置开始编辑
O:从光标当行 前一行位置开始编辑
A:从光标当行 最后一个位置开始编辑

回到命令行模式:Esc

进入底行模式:shift+“:”
:w  //进行保存
:q  //退出
:wq //保存并退出
:x //保存并退出
:q!//强制退出
:wq!//强制保存并退出

命令行模式下:
dd  //删除光标所在行
ndd //删除光标向下的n行
yy  //复制光标所在行
nyy //复制光标向下的n行
p   //粘贴到光标所在的下一行或下一个
P   //(大写P)粘贴到光标所在的前一行或前一个
r   //改变光标所在的字符,只改变一次
R   //改变光标所在的字符,Esc退出
x   //剪切或删除光标所在的一个字符
X   //剪切或删除光标所在的前一个字符
s   //删除光标所在的字符,并进入插入模式
S   //删除光标所在的行,并进入插入模式

u //撤销
ctrl+r //反向撤销


底行模式:
:s/str1/str2      		//将str1替换成str2  替换光标所在行的第一个
:s/str1/str2/g     	//将str1替换成str2  替换光标所在行的所有%s/str1/str2/g     	//将str1替换成str2  替换全文%s/str1/str2       	//将str1替换成str2  替换全文第一个
:n,ms/str1/str2      	//将str1替换成str2  替换n到m行的第一个
:n,ms/str1/str2/gc     //将str1替换成str2  替换n到m行的第一个

:n,my 					//复制n到m行
:n,md 					//删除n到m行

:set number 			//显示行号
:set nonumber 			//隐藏行号

vi/vim  文件不存在时会自动创建

2.2、GCC编译工具

GCC编译工具:
gcc test.c  //默认生成a.out可执行文件
gcc test.c -o test  //将生成可执行文件命名为test
gcc -o test.c test 

编译运行的四个步骤:预处理、编译、汇编、链接
预处理:处理头文件、宏定义等,不进行错误检查
gcc -E test.c -o test.i
编译:将预处理的文件进行处理,检查错误,生成汇编文件
gcc -S test.i -o test.s
汇编:将汇编文件编译生成机器语言 二进制文件
gcc -c test.s  -o test.o
链接:生成可执行文件
gcc  test.o -o test 

2.3、存储器

存储器:用来存放程序和数据。
       程序和数据在计算机中都是以二进制的形式存放存储器中

    存储容量的大小是以字节为单位度量,经常用KB、MB、GB、TB
	1KB = 1024B  1GB = 1024KB   1TB = 1024G

    (1)存储器分为内存储器(主存储器)和外存储器(辅助存储器)
	  内存 在计算机中,直接和运算器、控制器交换信息
	       容量小、存取速度快
	  外存 间接和cpu联系,存放一些必须使用但又不急于使用的程序和数据
	       程序必须调入内存中才能执行

程序:系统可以识别的指令。存储在 磁盘上 ,执行时 从磁盘 到内存 再到寄存器 最后被cpu执行

三、C语言基础

3.1、基本c语言程序结构

#include<stdio.h> //预编译命令

int main(void)//主函数名 int 函数返回类型
{
 	return 0;//返回值 必须和函数数据类型匹配
}
 
return 0;//默认 正常结束
return -1;// 异常结束

数值数据:
数制的数:按位权展开的多项式的和

3.2、进制之间的转换

(1)十进制
        基数:100 1 2 3 4 5 6 7 8 9)
		位权:数字权位的大小
	eg:123 = 1*10^2+2*10^1+3*10^0
	   3    10^0   位权:1
	   2    10^1         10
	   1    10^2         100

(2)二进制
      一般形式:0b111000
	  基数:2 (0 1)
	  位权:101 = 1*2^0+0*2^1+1*2^2 = 5
	  xx1 : 2^0    位权:1
	  x0x : 2^1    位权:2
	  1xx : 2^2    位权:4
    1 2 4 8 16 32 64 128 256 512 1024

二进制转十进制:每一位数乘位权 相加
十进制转二进制:a:短除法  b:凑数法


(3)八进制:
     一般形式:01101000
     基数:80 1 2 3 4 5 6 7 )
     位权:1 8 64 512 
    eg:0101
八进制转十进制:1*8^0+0*8^1+1*8^2+0*8^3 = 65
十进制转八进制:a:短除法  b:凑数法
八进制转二进制:a:一位八进制 转成 三位二进制
               
			   eg:0234           0b 010 011 100
                
				b:先转成十进制 再转成二进制
                
(4)十六进制
    一般形式:0x110101
	基数:160 1 2 3 4 5 6 7 8 9 A B C D E F)
	位权:1 16 256
十六进制转十进制:按位权相加
十六进制转二进制:a:一位十六进制 转成 四位二进制
              eg:0x234           0b 0010 0011 0100
二进制转十六进制:四位二进制转成一位十六进制
              eg: 0b0001 1001 0100   0x194

二进制:0b
八进制:0
十六进制:0x
(bit):计算机中存储数据的最小单位
字节(Byte):存储容量的度量单位,数据处理的基本单位
1个字节的存储空间 称为 一个存储单元
1Byte = 8 bit
ubuntu 32----4字节

计算机中非数值数据
	printf("hello!\\n");
ASCII码:
0 null('\\0')
10 '\\n'
48  '0'
65  'A'
97   'a'
122  'z'
32   空格

‘A’--->'a'  'A'+32  
'9'--->9    '9'-'0'   '9'-48

词法符号:程序设计语言中有若干字符组成的有意义的 最小语法单位

3.3、关键字

按作用分类:关键字、标识符、分隔符、运算符、标点符号
关键字:32auto:声明自动变量  一般不使用
double:声明双精度的变量或函数
int:声明整型的变量或函数
struct:声明结构体变量或函数
break:跳出当前循环
if:条件语句 肯定分支
else:条件语句 否定分支
long:声明长整型的变量或函数
switch:用于多分支
case:开关语句分支
enum:声明枚举类型
register:声明寄存器变量
typedef:用来给数据类型取别名
char:声明字符型的变量或函数
extern:看成引用
return:子程序中返回语句(可以带参数,也可以不带)
union:声明联合数据类型
const:声明只读变量
float:声明浮点型的变量或函数
short:声明短整型的变量或函数
unsigned:声明无符号类型的变量或函数
continue:结束当前循环,开始下一轮循环
for:一种循环语句
signed:声明有符号类型的变量或函数
void:声明函数无返回值或无参数,声明无类型的指针
default:开关语句的其他分支
goto:无条件的跳转
sizeof:计算数据类型的长度
volatile:声明变量在程序中可以被隐含的改变
do:循环语句中的循环体
while:循环语句中的循环条件
static:声明静态变量

3.4、数据类型

基本数据类型:charshortintlongfloatdouble
存储类型(有符号、无符号)signedunsignedstaticregisterexternconstvolatileauto
语句:ifelseforwhiledogotoswitchcasedefaultbreakcontinuereturn
构造:unionstructenum、
求字节:sizeof
取别名:typdef
空类型:void

3.5、标识符

     程序员按照命名规则自行定义的词法符号
	
	命名规则:
	1、由字母、数字、下划线(_)组成
	2、不能和关键字重名
	3、只能由字母或下划线开头
	
	标识符的命名方式:
	见名知意
	
	骆驼命名法:混合大小写字母构成变量名或函数名
	小驼峰:
	    常用于变量
		eg:myFirstName 
    大驼峰(帕斯卡命名法):
	    常用于类名、函数名
		eg:DataBaseUser
    下划线命名法:
	    eg:print_students_count();
 
 linux下严格区分大小写!

3.6、分格符

空格 ‘ ’    32
	换行 ‘\\n’   10
	制表符 '\\t' 9

    注释:1/*提示信息,注释一段内容*/
	      2//注释一行内容
		  3、#if 0 
		       中间内容被注释
			 #else
				中间内容正常执行
			 #endif

			#if 1
		       中间内容正常执行
			 #else
				中间内容被注释
			 #endif

3.7、运算符

运算符:算数、关系、逻辑、位
       根据操作数不同,分为单目运算符、双目运算符、三目运算符(?:)
	算术运算符:+ - * / % ++ --
	注:i++++i的区别
	
	关系运算:< > >= <= != ==(判断是否相等)
    int a = 3;
	int b = 4;
	(a>b)   0
	(a<b)   1
	(a!=b)  1
	(a==b)  0
	
	逻辑运算符:&&() ||()()
	    逻辑:0 为假,非0 为真
		
	    &&:两边为真才为真,只要有一边为假就为假
		||:只要有一边为真,就为真
		   两边为假才为假
		!:真假互换
	
	
	位运算:&(按位与) |(按位或) ~(按位取反) ^(异或) <<(左移)  >>(右移)
	    异或:相异为1 相同为0   
    
	    左移:右边补0                  右移:左边补0
		1110 0101 << 2  1001 0100      1110 0101 >> 2  0011 1001 

    位运算的一般用法:对指定位清01
	           //位运算的位置从0 开始计数
			   (1)对指定位清0
			   eg:对i的第2位清0 i=i & ~(1<<2) 
               (2)对指定位置1
               eg:对i的第5位置1 i=i | (1<<5)

    赋值运算符:= += -= *= /= %= ^=
	    int a = 3;
		int b = 4;
	a += b ===>  a = a+b	
	a -= b ===>  a = a-b
	a *= b ===>  a = a*b

    其他运算符:自增 自减
	a++ ==>    a=a   a+1
	++a ==>    a+1   a=a
	a-- ==>    a=a   a-1

    ?:  &  *  []  sizeof()
	
	标点符号:
	, ; () {}

3.8、数据类型

数据类型:
    基本数据类型:(在没有写明时,默认有符号)
	int 整型:在内存中占4字节
	unsigned int范围:0~2^32-1
	0000 0000 0000 0000 0000 0000 0000 0000
	1111 1111 1111 1111 1111 1111 1111 1111
 //10000 0000 0000 0000 0000 0000 0000 0000	 -1
    signed:(有符号数,将数据的第一位看做符号位,0表示正数,1表示负数)
	signed int 范围:-2^31~2^31-1
	0000 0000 0000 0000 0000 0000 0000 0000 //+0
	0111 1111 1111 1111 1111 1111 1111 1111 //+2^31-1
	1000 0000 0000 0000 0000 0000 0000 0000 //-2^31
	1111 1111 1111 1111 1111 1111 1111 1111//-(2^31-1)

    char字符型:在内存中占1字节(特殊的整型)
        字符:用单引号引起来的一个字符(ASCII码) 'a' '1'
		unsigned: 无符号 正整数
		unsigned char范围:0~255
                     1111 1111
					 0000 0000
		signed:(有符号数,将数据的第一位看做符号位,0表示正数,1表示负数)
		signed char范围:
					 
					 0 000 0000 //+0
					 0 111 1111 //+127
					 1 000 0000 //-128(-0无意义)
					 1 111 1`在这里插入代码片`111 //-127
    
	short:短整型             在内存中占2字节
	long:长整型             在内存中占4字节  (32位操作系统) (64位中占8字节)
	long long:长长整型      在内存中占8字节
	float:单精度浮点型(实型)  在内存中占4字节
	      用于展示小数,有效位数6~7double:双精度浮点型(实型)  在内存中占8字节  有效位数15~16

3.9、变量

局部变量:
    在函数内部(花括号{}内部定义的变量)
	作用域:模块(函数内部)  (从定义开始位置,到函数结束)
	生命周期:模块(函数)调用后结束
	如果未初始化,系统随机赋值

全局变量:
	在函数外部(花括号{}外部定义的变量)
	作用域:整个程序   (从定义开始位置,到程序结束)
    生命周期:程序结束
	系统默认初始化为0

正数:
    原码:数据的二进制
	反码:还是原码
	补码:还是原码

负数:
    原码:数据的二进制
    反码:符号位不变,其他位取反
    补码:反码+1(原码取反加1)	

变量的存储形式(以补码的形式存储)

常量: 在程序运行中 始终不变的
   (1)整型常量(十进制数、八进制数、十六进制数)
   (2)实型常量a:小数形式   eg:3.14
              b:指数形式   eg:12.34*10^3  ===> 12.34e3    e、E表示指数的底数10
        注:e前面要有数字    e后面必须是整数
   (3)字符常量:计算机内部按照ASCII码进行存储和处理
             a:普通的字符:用单引号界定
			      eg:'a'  'A'  '3'  '#'
			 b:转义字符: 用\\将字符 原本的含义 赋予新的含义
			      eg:'\\n' 
   (4)符号常量:一般用在程序的开头,用预处理指令定义
         #define 符号名 常量数据
		 eg:#define  PI  3.14159 
		 PI 就是符号常量 程序中,定义后的任意地方,都可用PI表示3.14159 
		注:符号名 符合命名规则 一般大写

变量:在程序中可以改变的数据(用户自定义)
    必须先定义才使用
	定义的一般形式:<存储类型><数据类型><变量名>
	    存储类型:(4G虚拟内存空间)
        auto 	static   register  extern	
		auto:自动类型  栈区
            auto int a;====>   int a;
		
		static:静态存储, 静态存储区(全局变量区)
		    只要程序一直运行,static修饰的变量就一直存在
		
		register:寄存器类型,存放在寄存器的存储空间
		        效率高、可加快程序运行的速度
		extern:外部引用(全局区)  
		  
	赋值:
        初始化:
            int a = 10;		
		
        一般:int a;
              a = 10;	

3.10、输入输出

格式输出函数:(加头文件 #include <stdio.h>)
    printf("字符"); //原样输出
	printf("%格式控制符",指定的数据)//以固定的格式输出指定的数据
	    %d  %c  %s   %f     %p   %%
		%c  //字符类型
		%d //十进制整数
		%x //十六进制无符号整数
		%o //八进制无符号整数
		%u //无符号十进制整数
		%s //字符串
		%e //指数形式浮点小数
		%f //小数形式浮点小数
		

	转义字符:用\\将字符原本的意义改变 赋予新的含义
			\\n   //换行
			\\t   //水平制表符
			\\0   //空
			\\v   //垂直制表符
			\\f   //换页
			\\b   //退格
			
			\\\\   //代表一个反斜线字符‘\\’
			\\'   //代表一个单引号字符
			\\“   //代表一个双引号字符

            \\ddd  //1到3位八进制数所代表的任意字符
			\\xhh  //1到2位十六进制数所代表的任意字符
	
	格式修饰符:
	    m  %md   //输出指定域宽,数字的长度>m,原样输出,小于m,左补空格
		n  %.nf  //限制浮点数的小数位数(四舍五入)
		#  %#x   //显示进制前的提示符0x 0
        
格式输入函数:
	scanf("格式控制符",输入位置的地址);
	    格式控制符:%d  %c  %s   %f 
		修饰符:m //指定域宽
		        l //双精度或长整型
				h //短整型
				* //抑制符
    
	scanf 输入

以上是关于Linux c语言的主要内容,如果未能解决你的问题,请参考以下文章

[linux][c/c++]代码片段02

我的C语言学习进阶之旅解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.(代码片段

我的C语言学习进阶之旅解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.(代码片段

SQL Select 语句的用法

linux打开终端如何启动scala,如何在终端下运行Scala代码片段?

C语言100个经典算法源码片段