Linux 系统编程
文章平均质量分 56
对所学的Linux系统编程的心得
一流觞
这个作者很懒,什么都没留下…
展开
-
为centOS7配置新的阿里云yum源
当我们的yum源无法访问国外,我们配置国内的阿里云的yum源修改本地的yum源curl http://mirrors.aliyun.com/repo/Centos-7.repo >/etc/yum.repos.d/CentOS-Base.repo在输入以下命令yum clean allyum makecache原创 2021-12-27 11:41:21 · 403 阅读 · 0 评论 -
Linux文件属性与权限
1、Linux的文件属性当我们先用ls -al查看文件这三个参数的出现顺序不会改变,若没有某个权限,则会以[-]代替。这三组参数中,第一组是文件所有者的权限;第二组是同用户组的权限;第三组是其他用户的权限。这三组权限均是针对某些账号而言的权限。另外,文件权限和目录权限意义不同,这是因为文件与目录记录的数据内容不相同。2、每个字符代表这个文件的具体类型:任何设备在 Linux 下都是文件,不仅如此,连数据库的接口也有专门的文件负责。若是[d]则是目录(directory)若是[-]则是文原创 2021-08-12 22:20:12 · 194 阅读 · 0 评论 -
Linux下的文件解压和打包
1、常见文件扩展名:*.tar.gz tar程序打包文件,并且通过gzip的压缩*.tar.bz2 tar 程序打包的文件,并且经过 bzip2 的压缩2、选项和参数-c :建立打包文件,-t :查看打包文件的内容含有哪些文件-x :解打包或解压缩的功能,可以搭配-C(大写)在特定到特定目录解开-j :通过 bzip2 的支持进行压缩/解压缩:此时文件最好为 *.tar.bz2-z :通过 gzip 的支持进行压缩/解压缩:此时文件最好为 *.tar.gz-v :在压缩/解压缩的过程中,将原创 2021-08-11 15:22:16 · 136 阅读 · 0 评论 -
shell脚本入门
1、脚本格式脚本以#!/bin/bash开头(指定解析器)标题2、第一个shell脚本:helloworld#!/bin/basheho "hhhhhhh"sh helloworld.shbash helloworld.shchmod 777 helloworld.sh---->./helloworld.sh这些方式都可以3.多命令处理在/home/hxx/,目录下创建一个banzhang.txt文件中增加“I love cls”#!/bin/bashcd /home/hx原创 2021-07-11 11:41:05 · 127 阅读 · 0 评论 -
Makefile的编写
一、Makefile简介:工程管理器,顾名思义,是指管理较多的文件,Make工程管理器也就是个“自动编译管理器”,这里的“自动”是指它能够根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件文件的内容来执行大量的编译工作,Make将只编译改动的代码文件,而不用完全编译。Makefile文件一般和项目的其他源文件放在同一个目录下。在机器上可以同时存在许多不同的makefile文件,如果一个大项目,可以用多个不同的makefile文件来分别管理项目的不同部分。Make原创 2021-06-17 09:36:10 · 158 阅读 · 0 评论 -
Linux的相关常用shell命令
Shell命令:Gec @ gec : ~ $用户名 主机名 当前工作路径~:家目录 每一个用户都对应一个家目录每一个用户在自己的家目录中拥有所有权限/:根目录 linux系统中文件系统的起始位置Touch:建立普通文件Touch 文件的路径名Mkdir:建立目录文件Mkdir 文件的路径名Cd:切换工作路径Ls:查看指定路径中的文件,默认是当前路径Ls -l 查看文件的详细信息D:文件的类型 d—目录 - --普通文件 p—管道 s—套接字Rwx:文件所有者的权限R原创 2021-01-10 08:59:01 · 131 阅读 · 0 评论 -
socket编程实现客户端和服务端
一、服务端#include <stdio.h>#include <sys/types.h> /* See NOTES */#include <sys/socket.h>//#include <linux/in.h>#include <arpa/inet.h>#include <netinet/in.h>#include <stdlib.h>#include <string.h>原创 2020-11-17 22:56:06 · 1288 阅读 · 0 评论 -
Linux下的socket编程(二)
一、TCP/IP 协议简介1.1、TCP/IP 是基于 TCP 和 IP 这两个最初的协议之上的不同的通信协议的大的集合。1.2、P协议 负责把数据从一台计算机通过网络发送到另一台计算机。数据被分割成一小块一小块,然后通过IP包发送出去。由于互联网链路复杂,两台计算机之间经常有多条线路,因此,路由器就负责决定如何把一个IP包转发出去。IP包的特点是按块发送,途径多个路由,但不保证能到达,也不保证顺序到达。1.3、TCP协议 则是建立在IP协议之上的。TCP协议负责在两台计算机之间建立可靠连接,保证数据原创 2020-11-15 22:52:00 · 246 阅读 · 0 评论 -
Linux下的socket编程(一)
一、TCP(传输控制协议)和UDP(用户数据报协议)区别TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,是专门为了在不可靠的网络中提供一个可靠的端对端字节流而设计的,面向字节流。UDP(用户数据报协议)是iso参考模型中一种无连接的传输层协议,提供简单不可靠的非连接传输层服务,面向报文区别:1) TCP是面向连接的,可靠性高;UDP是基于非连接的,可靠性低2) 由于TCP是连接的通信,需要有三次握手、重新确认等连接过程,会有延时,实时性差,同时过程复杂,也使其易于攻击;UDP没有建立连原创 2020-11-14 21:46:37 · 136 阅读 · 0 评论 -
Linux线程与条件变量相关API cond
1、互斥锁为防止多个线程同时访问同一个共享量,而条件变量允许一个线程就某个共享变量(或其他共享资源)的状态变化通知其他线程,并让其他线程等待(阻塞于)这一通知。条件变量总是结合互斥锁一起使用,条件变量就共享变量的状态改变发出通知,而互斥锁则提供对该共享变量访问的互斥2、API:2.1初始化条件变量头文件#include<pthread.h>函数原型int pthread_cond_init(pthread_cond_t *cv,const pthread_condattr_t *c原创 2020-11-12 23:43:09 · 181 阅读 · 0 评论 -
什么情况会造成死锁
**一、什么是死锁**由于互斥锁使用不当,导致多个进程无法进行下一步代码的运行。(即:两个互斥锁卡住了,以至于其它线程无法使用共享资源)**二、什么情况造成死锁**前提条件:你有2个锁,当线程A获得一把锁的时候,想要获得另外一把锁,而线程B使用着线程A想要的锁,还想要获得线程A正在使用的锁的时候。#include "stdio.h"#include "pthread.h"/*int pthread_create(pthread_t *restrict tidp, const pthre原创 2020-11-09 23:43:55 · 1074 阅读 · 0 评论 -
Linux下的进程之间的通信方式
一、进程之间的通信进程间通信(IPC)介绍IPC的方式通常有管道(分为无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。2. 管道2.1、管道,通常指无名管道,是 UNIX 系统IPC最古老的形式。特点:1、它是半双工(数据只能在一个方向上移动,只可以一个收一发),有固定的读写端。2、只能在具有亲缘关系的进程(父子进程和兄弟进程)之间通信。3、可以看成一种特殊文件,可以用read和write原创 2020-11-09 22:54:51 · 107 阅读 · 0 评论 -
Linux的gdb的使用
目录一、gdb简介二、gdb使用流程1、启动gdb2、查看源码3、运行程序4、设置断点5、单步执行6、查看变量7、退出gdb三、gdb基本使用命令1、运行命令2、设置断点3、查看源码4、打印表达式5、查看运行信息6、分割窗口7、cgdb强大工具四、总结一、gdb简介GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。 对于一名Linux下工作的c/c++程序员,gdb是必不可少的工具;二、gdb使用流程这里用原创 2020-11-03 14:36:04 · 206 阅读 · 0 评论 -
Linux的基本操作和用法
Linux基础操作及概念1. shell通常我们在使用Lnux时,并不是直接与系统打交道,而是通过一个叫做Shel的中间程序来完 安装分屏终端: sudo apt-getinstll terminator 成的,在图形界面下为了实现让我们在个窗口中完成用户输入和显示输出, Linux 系统还提供 快捷键:ctrl+alt+t打开终端 了一个叫做终端模拟器的程序(Termina) 。 打开终端:ctrl + alt + t推荐分屏终端:sudo apt-get install tmux1,通常原创 2020-11-03 13:54:12 · 1204 阅读 · 0 评论 -
在Linux线程中与与互斥锁相关API mutex
互斥锁:使用互斥锁(互斥)可以使线程按顺序执行。通常,互斥锁通过确保一次只有一个线程执行代码的临界段来同步多个线程。互斥锁还可以保护单线程代码。互斥锁的相关操作函数如下:1、创建锁及销毁锁 #include <pthread.h> int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr); int pthread_mutex_destroy原创 2020-11-02 22:56:12 · 305 阅读 · 0 评论 -
Linux上的线程相关的API
**与线程相关的API**1、多线程开发在 Linux 平台上已经有成熟的 pthread 库支持。其涉及的多线程开发的最基本概念主要包含三点:线程,互斥锁,条件。其中,线程操作又分线程的创建,退出,等待 3 种。2、互斥锁则包括 4 种操作,分别是创建,销毁,加锁和解锁。3、条件操作有 5 种操作:创建,销毁,触发,广播和等待。其他的一些线程扩展概念,如信号灯等,都可以通过上面的三个基本元素的基本操作封装出来。如下表: **1. 线程创建**#include <pthread.h原创 2020-10-31 23:43:00 · 671 阅读 · 0 评论 -
Linux下线程与进程的区别及线程的优势
**1、Linux线程介绍****1.1进程与线程**之前我们写相关Linux进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情。但是有了多个控制线程后,在程序设计时可以把进程设计成在同一时刻做不止一件事,每个线程各自处理独立的任务。 **进程是程序执行时的一个实例,是担当分配系统资源(CPU时间、内存等)的基本单位**。在面向线程设计的系统中,进程本身不是基本运行单位,而是线程的容器。程序本身只是指令、数据及其组织形式的描述,进程才是程序(那些指令和数据)的真正运行实例。 线程是原创 2020-10-31 21:16:18 · 456 阅读 · 0 评论 -
Linux的信号量
信号量(semaphore)与已经介绍过的 IPC 结构不同,它是一个计数器。信号量用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。**1、特点**1、信号量用于进程间同步,若要在进程间传递数据需要结合共享内存。2、信号量基于操作系统的 PV 操作,程序对信号量的操作都是原子操作。3、每次对信号量的 PV 操作不仅限于对信号量值加 1 或减 1,而且可以加减任意正整数。4、支持信号量组。例子:就像一个房间,信号量相当于开门的钥匙,房间相当于连接资源(一次仅允许一个进程使用的资源;如原创 2020-10-31 00:08:28 · 1674 阅读 · 0 评论 -
linux下的sigcation函数和sigqueue函数
**一、函数原型:sigaction函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作)**#include <signal.h>int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);struct sigaction { void (*sa_handler)(int); //信号处理程序,不接受额外数据,SIG_IGN 为忽略,SIG_DFL 为原创 2020-10-28 23:19:07 · 429 阅读 · 0 评论 -
Linux下的信号signal的编写
对于 Linux来说,实际信号是软中断,许多重要的程序都需要处理信号。信号,为 Linux 提供了一种处理异步事件的方法。比如,终端用户输入了 ctrl+c 来中断程序,会通过信号机制停止一个程序。信号的概述1、信号的名字和编号:每个信号都有一个名字和编号,这些名字都以“SIG”开头,例如“SIGIO ”、“SIGCHLD”等等。信号定义在signal.h头文件中,信号名都定义为正整数。具体的信号名称可以使用kill -l来查看信号的名字以及序号,信号是从1开始编号的,不存在0号信号。kill对于转载 2020-10-27 22:52:22 · 308 阅读 · 0 评论 -
Linux下把整数和结构体写入文件
写一个整数到文件int mian(){ int fd; int data=100; int data2=0; fd=open("./file",O_RDWR); int n_write=write(fd,&data,sizeof(int)); lseek(fd,0,SEEK_SET); int n_read=read(fd,&data2,sizeof(int)); printf("read=%d\n",data2); close(fd);}写一个结构体struc原创 2020-10-24 23:19:08 · 423 阅读 · 0 评论 -
system函数和popen函数的用法
**一、popen函数**我们先用man指令查一下popen函数函数说明:(1)popen()会调用fork()产生子进程,然后从子进程中调用/bin/sh -c来执行参数command的指令。(2)参数type可使用“r”代表读取,“w”代表写入。依照此type值,popen()会建立管道连到子进程的标准输出设备或标准输入设备,然后返回一个文件指针。随后进程便可利用此文件指针来读取子进程的输出设备或是写入到子进程的标准输入设备中。(3)此外,所有使用文件指针(FILE*)操作的函数也都可以原创 2020-10-09 23:06:29 · 737 阅读 · 0 评论 -
exec族用法
https://blog.csdn.net/u014530704/article/details/73848573?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160215480819195240454007%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=160215480819195240454007&转载 2020-10-08 19:26:18 · 308 阅读 · 0 评论 -
父进程等待子进程退出
为什么要等待子进程退出父进程等待子进程退出并收集子进程退出状态子进程退出状态不被收集,会变成僵尸进程举个例子#include <stdio.h>#include <sys/types.h>#include <unistd.h>#include <stdlib.h>int main(){ pid_t pid; int i; int cnt=0; pid=fork(); if(pid > 0){//父进程 while(1)转载 2020-10-07 20:44:29 · 1977 阅读 · 0 评论 -
Linux中fork函数的用法
一、fork入门知识一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。当fork()的返回值为1时为父进程,当fork()的返回值为0时为子进程。...原创 2020-10-06 23:07:47 · 575 阅读 · 0 评论 -
Linux的进程的基本概念
一、什么是程序,什么是进程,二者有什么区别?程序只是一组指令的有序集合,它本身没有任何运行的含义,它只是一个静态的实体。而进程则不同,它是程序在某个数据集上的执行。进程是一个动态的实体,它有自己的生命周期。进程是具有一定独立功能的程序关于一个数据集合的一次运行活动。通俗来说就是程序跑起来了,系统中就多了一个进程二、如何查看系统中有哪些进程?1、使用ps指令查看:在实际工作中,配合grep来查找程序中是否存在进程。2、top指令,类似于window的任务管理器三、什么是进程标识符?每个进程都有原创 2020-10-02 21:03:08 · 318 阅读 · 0 评论 -
fopen()、fwrite()、fread()函数使用
fopen()函数:1.作用: 在C语言中fopen()函数用于打开指定路径的文件,获取指向该文件的指针。2.函数原型:FILE * fopen(const char * path,const char * mode);– path: 文件路径,如:“F:\Visual Stdio 2012\test.txt”– mode: 文件打开方式,例如:“r” 以只读方式打开文件,该文件必须存在。“w” 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。“w+原创 2020-09-28 23:38:57 · 293 阅读 · 0 评论 -
open与fopen的区别
来源从来源的角度看,两者能很好的区分开,这也是两者最显而易见的区别:open是UNIX系统调用函数(包括LINUX等),返回的是文件描述符(File Descriptor),它是文件在文件描述符表里的索引。fopen是ANSIC标准中的C语言库函数,在不同的系统中应该调用不同的内核api。返回的是一个指向文件结构的指针。PS:从来源来看,两者是有千丝万缕的联系的,毕竟C语言的库函数还是需要调用系统API实现的。移植性这一点从上面的来源就可以推断出来,fopen是C标准函数,因此拥有良好的.转载 2020-09-24 23:02:02 · 221 阅读 · 0 评论 -
vm-tool的安装
本人安装VMware Tools 的需求是在Linux虚拟机和我的Windows实体机之间可以实现相互之间的粘贴复制设置一个虚拟机和实体机的共享文件夹调整虚拟机的大小使虚拟机铺满全屏安装步骤1.点击VMware菜单上的虚拟机 ,弹出的菜单中点击安装VMware Tools(注意要在你的Ubuntu操作系统开启的情况下安装)等待一会,会出现如下图的弹窗,点击是然后点击的右边任务栏DVD图标,可以找到VMware Tools压缩文件把这个VMware Tools压缩文件复制到opt文件夹原创 2020-09-23 19:34:07 · 626 阅读 · 0 评论 -
Linux的数据库的更新
我是在Docker的Ubuntu容器上出现的问题一般apt-get出现这种情况:Reading package lists... DoneBuilding dependency tree Reading state information... DoneE: Unable to locate package ****就是没有更新APT库更新一下就好了sudo apt-get updatesudo apt-get upgrade然后再apt-get install ***原创 2020-09-23 19:25:19 · 641 阅读 · 0 评论 -
有关Linux的相关操作vim的操作
常用vim的相关命令:在这里插入图片描述原创 2020-09-18 10:56:34 · 169 阅读 · 0 评论 -
Linux里的指定修改数据
SPEED=3LENG=9SCORE=9LEVEL=5将LENG的值改成5.首先先介绍一个函数用法strstr(),char *strstr(const char *haystack, const char *needle)参数:haystack – 要被检索的 C 字符串。needle – 在 haystack 字符串内要搜索的小字符串。返回值该函数返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 null。#include <sys/typ原创 2020-09-14 23:08:00 · 427 阅读 · 0 评论 -
cp指令的编写
Cp 原文件 目标文件1、C语言的参数2、思路:(补充:)int main(int argc,char **argv){//**argv里的每一项都是数组 argc表示三个参数 printf("total par ams %d\n",argc); printf("NO.1 par ams %s\n",argv[0]); printf("NO.2 par ams %s\n",argv[1]); printf("NO.3 par am原创 2020-09-06 11:58:37 · 490 阅读 · 0 评论 -
Linux的编译文件操作
**一、文件的编程**:文件编程的内容很多,但是重点在应用,主要关心如何用代码操作文件,实现文件创建,打开,编辑等自动化执行。二、对文件使用的API打开 open读写 write/read;光标定位 lseek;关闭 close三、API的使用1、open函数的使用:参数说明:1.pathname要打开或创建的目标文件(路径)2.flags打开文件时,可以传入多个参数选项,用下面的一个或者多个常量进行“或”运算,构成falgs参数:O_RD原创 2020-09-06 09:39:34 · 971 阅读 · 0 评论