0 Linux 前言

目录

0 Linux 前言
1 Linux 文件读写
2 Linux 文件属性
3 Linux 目录操作
4 Linux 系统部分基础概念
5 Linux 进程初探
6 Linux 进程间通信(IPC)
7 Linux 守护进程
8 Linux 线程
9 Linux 网络编程中的部分基础概念
10 Linux TCP简单通信
11 Linux I/O多路复用
12 Linux UDP简单通信
13 Linux 广播和组播
14 Linux 本地套接字 (可进程间通信)

注: 基于Ubuntu的Linux C记录

1.更换apt镜像源

2.安装编译工具

sudo apt install build-essential cmake

3.CMakeLists.txt模板

cmake_minimum_required(VERSION 3.1)
project(demo)
add_compile_options(-std=c11 -Wall -Werror -Wextra -pedantic -Wimplicit-fallthrough -Wsequence-point -Wswitch-default -Wswitch-unreachable -Wswitch-enum -Wstringop-truncation -Wbool-compare -Wtautological-compare -Wfloat-equal -Wshadow=global -Wpointer-arith -Wpointer-compare -Wcast-align -Wcast-qual -Wwrite-strings -Wdangling-else -Wlogical-op -Wconversion -Wno-pedantic-ms-format)
include_directories(.)
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
aux_source_directory(. src)
add_executable(demo ${src})
target_link_libraries(demo PRIVATE Threads::Threads)

4.Linux C手册安装

  • C语言库函数基本帮助文档
sudo apt install manpages manpages-de manpages-de-dev manpages-dev
  • POSIX函数
sudo apt install manpages-posix manpages-posix-dev
  • 内核函数
sudo apt install linux-doc




5.部分常用命令简述

  • chmod
    0 Linux 前言_第1张图片
  • chown
    0 Linux 前言_第2张图片
  • chgrp
    0 Linux 前言_第3张图片
  • tar
    0 Linux 前言_第4张图片
  • rar
    0 Linux 前言_第5张图片
  • zip 和 unzip
    0 Linux 前言_第6张图片
命令 grep
参数 grep -rn "[查找的内容]" ([路径])
在指定路径下查找指定的内容,若有则列出文件名及所在行的内容以及在对应文件中的行号. (省略路径,则查当前工作路径)
grep -rl "[查找的内容]" ([路径])
列出含有查找内容的文件名
命令 find
参数 find [路径] -name "[查找的名字]"
find [路径] -type [文件类型]
普通文件 f
目录 d
符号链接 l
管道 p
套接字 s
字符设备 c
块设备 b
find [路径] -size [文件大小]
+ 大于
- 小于
单位: k 千字节, M 兆字节
atime 最后访问的时间
mtime 内容最后修改的时间
ctime 文件属性最后修改的时间

+n n天以前
-n n天以内
maxdepth 最深层数
mindepth 最浅层数
-exec [shell命令] {} \;
-ok [shell命令] {} \;
管道 | xargs [shell命令]
命令 netstat
参数 -a 显示所有选项, 默认不显示 LISTEN 相关
文件名
-p 显示建立相关连接的程序名
-n 拒绝显示别名, 能显示数字的全部转化为数字
-t (TCP) 仅显示TCP相关的选项
-u (UDP) 仅显示UDP相关的选项
-l 仅列出有在 Listen (监听) 的服务状态



Linux 库
静态库 库文件命名 libxxx.a
前缀(lib) + 库名(xxx) + .a
编译生成 将代码生成目标文件(.o): gcc -c xxx.c
将目标文件打包为静态库: ar rcs libxxx.a xxx.o
动态库 命名 libxxx.so
前缀(lib) + 库名 + .so
编译生成 gcc -shared -fPIC -o libxxx.so xxx.c
调用 gcc -I [头文件所在目录] -L [库文件所在目录] -l[库名] -o [生成二进制的文件名] xxx.c




6.Linux目录结构简述
0 Linux 前言_第7张图片






后记

我与Linux之缘
2017年高一后的暑假,七月的时候,因为接触到易语言,对"编程"起了兴趣. 八月份开始的时候,在网上查阅信息,了解到了C语言,当时对编程还没什么系统的概念,看网上很多人说用Linux学C语言好,就对Linux起了好奇心,想试一试. 来回的查,最终选定了银河麒麟(就是一个基于Ubuntu衍生的"国产"系统),然后开始作死的尝试安装,试图搞Windows和Linux的双系统, 把下载的镜像烧录到U盘,然后准备安装,安装不成还把引导弄坏了. 试图凭着U盘中烧录的镜像安装也不成,想装Windows也不行,家里只有那台笔记本,没法制作安装盘. 不过好在烧录的镜像还有一个 Live 模式, 可以用U盘启动,但是每次启动之前做的修改就没了. 这样通过Live模式,以一种奇怪的方式用了差不多半年的Linux, 这是后话. 在八月入Linux后,我也不断查阅资料,怎么写C语言,最开始是用的银河麒麟上预装的Qt Creator, 后面懂了些,开始换成vim编辑,然后配合gcc编译. 回想当时也确实挺懵的,当时还遇到一个问题卡过我几天,就是编译好的程序 a.out , 但是直接在终端输 a.out 回车却不能执行, 之后找了一本感觉不错的C语言书(也是基于Linux终端的), 才知道原来还要加个 ./ .八月后面的那十天左右就天天抄那本书上的案例程序执行, 到开学的时候,我也对C语言有大概的了解了,可以不需要书简单的写写了.而在这个时间段,对Linux也有了更多了解了,基本的常用命令没什么问题了,不知道就查,越用越熟. 从那以后我在编程中就基本无法离开Linux了,也是一种喜好. 有一段是Windows和Linux混合用,Windows 10支持Linux子系统, 2020年(Windows 10 2004)推出了WSL2,很多之前不能正常运行的UI程序也可以正常用了,前不久又直接把我电脑系统换成了Ubuntu 20.04.


附注:

关于函数空参数和显式void声明无参数的简述
C中,自定义函数在不需要参数的情况下,括号内留空和显式声明void其实是不同的,在采用留空的方式下定义一个函数,代表的是不限定参数个数.比如你定义了一个函数 void fun() {} ,调用的时候,你可以当作无参数fun(); ,也可以 fun(6); fun('c'); fun(1, 4, 7); fun("1f", 5); ,编译器是不会报错的. 但是如果你定义函数时显式声明无参数: void fun(void), 那么调用的时候就只能使用 fun();

而在C++中,两种情况是等效的, 因为C++中存在函数重载, 只能依靠参数不同来区别, 不可能将 void fun() {}void fun(void) {}视作重载,调用的时候都是用留空的方式代表不传入参数,无法区别

对于我,在C中,凡是无参数我都会显式声明 void , 在C++中就留空

你可能感兴趣的:(0 Linux 前言)