栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C基础高级和Linux】学习心得

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C基础高级和Linux】学习心得

       岁月如梭,不知觉间来华清远见学习已经过了四十多天了,从最初的忐忑不安,不知道学不学得懂,掌不掌握得到,到如今的越来越有自信,越来越有把握完成来华清学习的最初的目标。

       回顾一下到现在为止学习到的知识:从第一部分的C基础开始,一开始简单的介绍linux系统下的基本操作,比如在linux下一切皆文件,常用的命令:rm、cd、ls、pwd、mkdir、touch、mv、cp、cat等。

详情:

rm 命令
删除一个目录中的一个或多个文件或目录,如果没有使用- r选项,则rm不会删除目录。如果使用 rm 来删除文件,通常仍可以将该文件恢复原状。
命令格式
rm [选项] 文件名

常用选项参数:-r, -R: 指示rm将参数中列出的全部目录和子目录均递归地删除

cd 命令

cd 路径

cd ../../  进入当前目录的上一级的上一级目录

cd /  进入根目录

ls 命令

ls 命令不仅可以查看 linux 文件夹包含的文件而且可以查看文件权限(包括目录、文件夹、文件权限)查看目录信息等等。
命令格式
ls [选项][目录名]
常用参数

  • -l :列出长数据串,包含文件的属性与权限数据等
  • -a :列出全部的文件,连同隐藏文件(开头为.的文件)一起列出来(常用)
  • -d :仅列出目录本身,而不是列出目录的文件数据
  • -h :将文件容量以较易读的方式(GB,kB等)列出来
  • -R :连同子目录的内容一起列出(递归列出),等于该目录下的所有文件都会显示出来

 pwd 命令

查看"当前工作目录"的完整路径。
命令格式:
pwd [选项]
常用参数:

  • -P :显示实际物理路径,而非使用连接(link)路径
  • -L :当目录为连接路径时,显示连接路径

mkdir 命令

用来创建指定的名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录。
命令格式
mkdir [选项] 目录

mkdir test

touch 命令
touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间。
命令格式
touch [选项] 文件
常用参数

  • -a 或--time=atime或--time=access或--time=use 只更改存取时间
  • -c 或--no-create 不建立任何文档
  • -d 使用指定的日期时间,而非现在的时间

mv 命令
可以用来移动文件或者将文件改名(move (rename) files)。当第二个参数类型是文件时,mv命令完成文件重命名。当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。
命令格式
mv [选项] 源文件或目录 目标文件或目录

mv test.txt test1.txt  

mv test.txt ./test/

cp 命令
将源文件复制至目标文件,或将多个源文件复制至目标目录。
命令格式
cp [选项] 源文件 目录 或 cp [选项] -t 目录 源文件
cp test.txt  test1.txt

cat 命令
用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用。

cat [选项] 文件名

cat test.txt

再之后介绍vi编译器,常用操作:gg=G、a、i、o、:、gg、G、$、+num、p、dd、ndd、yy、nyy、wq、q!、w、x等。

命令行模式下:

gg=G : 标准化所有代码

a :在光标的后面插入

i:在光标当前位置插入

o:在光标的下一行插入

gg:跳到文章开头

G:跳到文章末尾

$:跳到光标所在行的末尾

vi 文件名 +数字:进入文件到指定行

dd:剪切光标所在行

ndd:剪切光标及之后一共n行

yy:复制光标所在行

nyy:复制光标及之后n行

尾行模式:

wq or x:保存并退出

q:退出

w:写

q!:强制退出

要记住这些常用操作命令只有多练习、多使用,用多了自然就可以掌握了。在C基础中,最让我头痛的无非就是指针,都说要学好C语言,最基本的就是熟练掌握指针了。在学习指针中,有个东西一直困扰了我很久,如一个整数类型的数组,指针p指向数组第一个元素,指针q指向数组第二个元素,那么q-p得到的是什么呢?这个问题让我踩了坑,咋一看两个都是指针,那么两个指针相减得到的是它的偏移量呀,但是,在程序运行时,q-p并不是直接两个地址相减,是在相减的基础上还要除以一个sizeof(数组类型),得到的是两者之间相差的元素个数。还有最大的困难几个就是指针数组、数组指针、函数指针、指针函数、指针函数指针。要想学好指针,首先要知道这个指针的类型是究竟什么,老师教了一种很简单就能识别的方法,就是右左右原则,

比如:char *p[10],变量p的右边是一个数组,所以p的本质是一个数组,再看p的左边,是char *类型的,说明这是一个指针数组,数组中的每个元素都是指向char类型数据的指针;

再比如:void *(*start_routine) (void *),本质是一个指针,指向的是一个指针函数,所以是指针函数指针;

在之后需要注意的是函数中的参数传递,分为值传递和地址传递,值传递不会改变实参的值,选好自己需要的类型是很重要的。

在第二阶段中,对于Linux下的包的管理,常用的是apt-get;

apt-get install packagename

安装一个新软件包

apt-get remove packagename

卸载一个已安装的软件包(保留配置文档)

apt-get update  更新软件包列表

apt-get upgrade  可以使用这条命令更新软件包

apt-cache: 用于查询软件包信息

对于shell脚本,其本质是有序命令的集合,编写脚本文件,在脚本文件中也有其特定的语言格式,比如在每个.sh的文件开头都需要#!/bin/bash的申明,表示此文件是脚本文件;同时也存在循环、判断、参数、以及命令置换符:` `,只需要记住常用的语句格式;最后的工程管理非常重要,一个工程应该需要一个makefile文件来管理,使用makefile文件管理工程的好处是简化编译,同时在后期维护很方便。

第三阶段为数据结构与算法

在这个阶段学习了线性结构

线性表、链表、栈、队列

线性表:在物理和逻辑上都是连续的,且只有唯一后继和唯一前驱;对于表的操作:通常为增加、删除、修改、查询、判空、判满;链表:物理上不连续,逻辑上连续,链表又分为单链表、单向循环链表、双向链表、双向循环链表;栈:只在一端操作,先进后出;队列:一段插入、另一端删除,为了避免内存泄漏,需要构建循环队列,并且少使用一个存储空间,便于判断队空队满

非线性结构

树、二叉树、图

树:唯一前驱,多个后继,树根只有一个节点;二叉树:唯一前驱,最多有两个后继,二叉树的遍历有三种方式:先序遍历、中序遍历、后序遍历;知道两种遍历求另一种遍历的条件是必须知道中序遍历;运用坐标法。

第四阶段是文件IO,文件IO是系统调用,资源耗费大;标准IO为C库调用;

标准IO函数:

fopen、fclose、fwrite、fread、fgetc、fputc、fgets、fputs、fseek,这些函数都是对流指针操作

文件IO:

open、close、read、write、lseek,这些函数都是对文件描述符操作

目录操作函数:

opendir、readdir、closedir

文件信息函数:

stat、getpwuid、getgrgid

库的制作,

静态库

动态库

在之后是进线程,对于进程:

一个程序的执行过程,拥有唯一进程号,fork为创建进程,exit为结束进程,fork会返回一个进程id,id为0的是子进程,大于0的是父进程,wait(阻塞等待)和waitpid(可设置阻塞或者非阻塞)则是父进程回收子进程资源,如果不回收则会产生僵尸进程

exec函数簇

作用是在一个进程中启动另一个进程;守护进程:一直在后台运行,创建流程为:创建子进程,父进程退出,在子进程中创建新会话,修改工作目录,修改umask,关闭文件描述符(如默认打开的0、1、2)。线程:通常线程指的是共享相同虚拟地址空间的多个任务,使用多线程, 大大提高了任务切换的效率;需要注意的点:在使用共享对象时,需要考虑竞态,这时可考虑使用同步或者互斥机制。进程间通信的方式:无名管道、有名管道、信号、共享内存、消息队列、信号灯集、套接字。

第五阶段是网络编程,tcp/ip协议(tcp:解决数据传输问题,ip:解决不同网络间的连接),osi七层结构:

应用层(app)

表示层(数据加密解析)

会话层(建立逻辑名字和物理名字的联系)

传输层(确保数据传输,流量控制)

网络层(数据分组,选择路由)

数据链路层(将数据组装成可以发送的帧格式)

物理层(将数据转化成物理信号)

tcp/ip协议模型为四层结构:应用层、传输层、网络层、网络接口物理层。

Tcp:稳定可靠,有连接,无失序,数据流式;

udp:不稳定,无连接,有失序,数据报式。

服务器的创建步骤:

创建套接字(socket)

绑定套接字信息(bind 、 struct sockaddr_in addr)

监听套接字(listen)

被动等待连接(accept 阻塞)

客户端:

创建套接字(socket)

绑定(可选)

连接(connect)

客户端连接服务器的三次握手,断开连接的四次挥手;

实现并发服务器的方法:进程、线程、IO多路复用(select、poll、epoll)。

       对于每个阶段的学习,都要即使复习和巩固,时间长了是会忘记的,要多加练习,并且要结合所学的所有知识,将所有阶段的东西结合起来,才能更加熟练的掌握。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/876299.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号