自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 2.LED闪烁

使用STC-ISP自带延时函数,选择相对应的指令及对应的芯片。类比于搬砖,搬砖先要使劲(点亮灯)。放下砖头卸力(灭灯)。

2022-07-19 21:51:44 105

原创 1.点亮LED

D4,D5,D6板子上有标记,D5一端通过电阻接5v,另外一端接着led1标志的线。发现在89C52RC的电路图中,也有led1的标志。他是在P3的io口组中,接在P3.7引角,所以编程让P3.7输出低电平就让D5灯完成串联电路,所以亮。得看原理图,但是不要怕,初中电路知识而已。也叫单片机原理图是硬件设计者设计的。给LED1对应的标号的P3.7角一个低电平,就能点亮灯。记住标号一样代表一根电线。...

2022-07-19 21:40:05 719

原创 网络编程入门(scoket编程)

socket核心函数 1.指定连接协议(说汉语还是英语) int socket(int domain,int type,int protocol);//domain一般是AF_INET (IPV4),protocol(0) 2.地址准备好 地址API转换 int inet_aton(const char* straddr,struct in_addr *addrp); 把字符串形式的“192.168.1.123”转为网络能识别的格式 char* ine

2022-06-27 14:48:05 231

原创 初探网络编程

进程间的通讯依赖于Linux内核,缺陷:无法多机通讯。网络编程可实现。 Linux网络编程:地址:IP地址、端口号;数据:协议(数据格式):http、TCP/UDP客户端:ftp、http、socket(入门)socket套接字 :TCP:面向连接(可靠);UDP:面向报文(不太可靠),数据量大,如视频 TCP/UDP的对比(面试会问): 字节序(百度百科):字节序是指多字节数据在计算机内存中储存或者网络传输时各字节的储存顺序。 常见序(记住,

2022-06-27 14:30:22 86

原创 线程的条件变量(cond)

条件变量是线程另一可用的同步机制。条件变量给多个线程提供了一个会合的场所。条件变量与互斥量一起使用时,允许线程以无竞争的方式等待特定的条件发生。 条件本身是由互斥量保护的。线程在改变条件状态前必须首先锁住互斥量,其他线程在获得互斥量之前不会察觉到这种改变,因为必须锁定互斥量以后才能计算条件。 条件变量使用之前必须首先初始化,pthread_cond_t数据类型代表的条件变量可以用两种方式进行初始化,可以把常量PTHREAD_COND_INITIALIZER赋给静态分配的条件变量,

2022-06-27 13:51:54 526

原创 线程(thread)

典型的Linux进程可以看作只有一个控制线程:一个进程在同一时刻只能做一件事情。有了多个控制线程,就可以把程序设计成同一时刻做不止一件事情,每个线程都有各自要处理的任务。 进程是程序执行的一个实例。它是担当分配系统资源,如CPU时间、内存等的基本单位。在面向线程设计的系统中,进程本身不是运行的基本单位,而是线程的容器。 线程是操作系统中能够进行运算调度的最小单位。一条线程指的是进程中一个单一顺序的控制流,一个进程可以并发多个线程,每条线程并执行不同的任务。线程包含了表示进程内执行

2022-06-27 13:35:02 363

原创 信号量集总结

信号量(semaphore)与已经介绍过的 IPC 结构不同,它是一个计数器。信号量用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。信号量用于进程间同步,若要在进程间传递数据需要结合共享内存。信号量基于操作系统的 PV 操作,程序对信号量的操作都是原子操作。每次对信号量的 PV 操作不仅限于对信号量值加 1 或减 1,而且可以加减任意正整数。支持信号量组。 最简单的信号量是只能取 0 和 1 的变量,这也是信号量最常见的一种形式,叫做二值信号量(Binary Semaphore)。而

2022-06-23 23:52:30 983

原创 进程间通信

目录一、管道1.无名管道1、特点:2、原型:3、应用(父子进程通信) 思路:2.FIFO 1、特点2、原型3、应用二、消息队列1、特点2、原型3、应用三、共享内存1、特点2、原型3、例子四、信号(signal)1.信号概念2.信号注册函数——入门版 signal原型进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket

2022-06-23 23:32:49 316

原创 system函数和popen函数

system()函数功能强大,我对linux中的实现比较了解,具体分析这个,windows中的类似就不详解了。分析一下原理: 当system接受的命令为NULL时直接返回,否则fork出一个子进程,因为fork在两个进程:父进程和子进程中都返回,这里要检查返回的 pid,fork在子进程中返回0,在父进程中返回子进程的pid,父进程使用waitpid等待子进程结束,子进程则是调用execl来启动一个程序代替自己,execl("/bin/sh", "sh&q

2022-06-23 09:14:28 285

原创 初识C语言

C程序的基础框架#include <stdio.h> //编译预处理指令 #int amin() //程序的入口函数main{ //程序(函数)开始标志 //编写的代码 例如 printf("666\n"); return 0; //程序退出前返回给调用者的值 } //程序(函数)结束标志数据的表现形式变量1.在程序运行过程中,其值可以改变!如代数的x,y,z2. 要先定义再使用!如int a = 3;int b ..

2022-04-17 21:44:54 147

原创 为什么要用exec族函数,有什么作用

linux进程---exec族函数(execl, execlp, execle, execv, execvp, execvpe)_牛仔的blog-CSDN博客_execleexec族函数函数的作用:我们用fork函数创建新进程后,经常会在新进程中调用exec函数去执行另外一个程序。当进程调用exec函数时,该进程被完全替换为新程序。因为调用exec函数并不创建新进程,所以前后进程的ID并没有改变。exec族函数定义:  可以通过这个网站查询:linux函数查询 功能:   在调用进程内部执行一个可执行文..

2022-03-06 13:28:47 279

原创 等待子进程退出

为什么等待子进程?要子进程干活,检查活干完了,还是没完(abort还是被杀死了)父进程等待子进程退出 并收集子进程的退出状态子进程退出状态不被收集,变成僵死进程(僵尸进程)...

2022-03-06 13:24:54 178

原创 vfork创建进程

vfork函数 也可以创建进程,与fork有什么区别关键区别一: vfork 直接使用父进程存储空间,不拷贝。关键区别二: vfork保证子进程先运行,当子进程调用exit退出后,父进程才执行。fork创建#include <stdio.h>#include <sys/types.h>#include <unistd.h>int main(){ pid_t pid; pid = fork();

2022-03-05 15:25:15 116

原创 fork创建一个子进程的一般目的

fork编程实战

2022-03-05 14:42:07 50

原创 创建进程函数fork的使用

使用fork函数创建一个进程 pid_t fork(void);

2022-03-05 14:30:29 115

原创 进程关键概念

问1. 什么是程序,什么是进程,有什么区别?程序是静态的概念,gcc xxx.c –o pro 磁盘中生成pro文件,叫做程序进程是程序的一次运行活动, 通俗点意思是程序跑起来了,系统中就多了一个进程问2. 如何查看系统中有哪些进程?a.使用ps指令查看 实际工作中,配合grep来查找程序中是否存在某一个进程b.使用top指令查看,类似windows任务管理器问3. 什么是进程标识符?每个进程都有一个非负整数表示的唯一ID, 叫做pid,类似身份证Pid=0: 称为交换进程(

2022-03-04 21:41:22 78

原创 标准C库文件其它函数

fputc#include <stdio.h>#include <string.h>int main(){ FILE *fp; int i; char *str = "chenlichen bu shuai?"; int strLen = strlen(str); fp = fopen("./test.txt","w+"); for(i=0;i<strLen;i++

2022-03-04 21:04:20 40

原创 标准C库写入结构体到文件

#include <stdio.h>#include <string.h>struct Test{ int a; char c;};int main(){ //FILE *fopen(const char *path, const char *mode); FILE *fp; struct Test data = {100,'p'}; struct Test data2.

2022-03-04 20:44:08 50

原创 标准C库打开/创建文件,读写,光标移动

fopen()#include <stdio.h>FILE *fopen(const char *path, const char *mode);mode指定文件的打开模式:r:只读方式打开一个文本文件(该文件必须存在) r+:可读可写方式打开一个文本文件(该文件必须存在) w:只写方式打开一个文本文件(若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件) w+:可读可写方式创建一个文本文件(若文件存在则文件长度清为零,即该文件内容会消失。若文件不.

2022-03-04 20:25:57 266

原创 文件如何记录一个结构体

文件如何记录一个结构体

2022-03-04 19:54:11 55

原创 配置文件的修改

配置文件的修改

2022-03-04 10:51:24 90

原创 实现Linux CP指令

cp scr.c des.c1.c语言参数#include <stdio.h>int main(int argc,char **argv){ return 0;}int argc 表示命令行参数的个数(包括可执行程序名本身)。cp scr.c des.c 3个参数char * argv [] 或char **argv表示每个参数的具体内容, argv [0] 为命令行中可执行程序名本身, argv [1] 为命令行中第二个参数的内容,依次类推。 如 前者可接受

2022-03-04 10:06:28 907

原创 文件“光标”位置

光标位置手册相关说明头文件:#include <sys/types.h> #include <unistd.h>定义函数:off_t lseek(int fildes, off_t offset, int whence);函数说明:每一个已打开的文件都有一个读写位置, 当打开文件时通常其读写位置是指向文件开头, 若是以附加的方式打开文件(如O_APPEND), 则读写位置会指向文件尾. 当read()或write()时, 读写位置会随之增加,lseek()便是用..

2022-03-03 21:12:12 166

原创 文件读取操作

读取文件手册函数定义:ssize_t read(int fd, void * buf, size_t count);函数说明:read()会把参数fd所指的文件传送count 个字节到buf 指针所指的内存中。返回值:返回值为实际读取到的字节数, 如果返回0, 表示已到达文件尾或是无可读取的数据。若参数count 为0, 则read()不会有作用并返回0。另外,以下情况返回值小于count。代码实现#include <sys/types.h>#include &.

2022-03-03 20:48:40 181

原创 文件写入操作

写入文件手册手册说明须包括#include<unistd.h>函数定义:ssize_t write (int fd, const void * buf, size_t count);函数说明:write()会把参数buf所指的内存写入count个字节到参数fd所指的文件内。返回值:如果顺利write()会返回实际写入的字节数(len)。当有错误发生时则返回-1,错误代码存入errno中。代码实现#include <sys/types.h>#incl

2022-03-03 20:09:36 188

原创 Linux系统文件打开及创建

打开/创建文件参数说明Pathname:要打开的文件名(含路径,缺省为当前路径)Flags: O_RDONLY 只读打开 O_WRONLY 只写打开 O_RDWR 可读可写打开 当我们附带了权限后,打开的文件就只能按照这种权限来操作。 以上这三个常数中应当只指定一 个。下列常数是可选择的: O_CREAT 若文件不存在则创建它。使用此选项时,需要同时说明第三个参数mode,用其说明该新文件的存取许可权限。 ...

2022-03-03 19:41:54 532

原创 第六章 指针

1.指针的引入指针==地址场景 去女朋友定的酒店(变量访问的两种方式):1.紫萱主题酒店森林主题房(变量名)2. 福建省福州市创业路5号1栋202房(地址)使用 int a = 10;(类型,变量名,内存地址,值) 1. a (变量名能访问) 直接访问 2. 通过地址也能访问 &a(取地址运算符) *(&a) 将地址内的值读出运算符 间接访问#include <stdio.h>//地址== 指针int m......

2022-02-23 11:44:57 223

原创 第五章:字符串

字符串的定义方式及输出方式#include <stdio.h>#include <stdlib.h>#include <string.h>/* 字符串的定义方式及输出方式 字符串是字符数组,虽然不想这么说*/int main(){ int i; char a[3] = {11,22,33}; char str1[3] = {'a','b','c'};//定义方式1,类似数组 for(i=0;i<sizeof(str1)/size

2022-02-12 21:59:18 124

原创 链表的总结

1.链表是个好东西链表概念:数据结构 数据存放(集合)的思想 就像串星星数组 特点 元素地址是连续的 缺点:增 删 改 查(链表可以解决)#include <stdio.h>#include <stdlib.h>/*链表概念:数据结构 数据存放(集合)的思想 就像串星星数组 特点 元素地址是连续的 缺点:增 删 改 查(链表可以解决)*/struct Test{ int data; struct Test *next;};int ...

2022-01-29 22:43:05 2419

原创 初识结构体

1.结构体是什么的,为什么要用?都说C语言是面向过程的语言,而结构体是C语言面向对象的方式,数组是存放同类型的集合体,而结构体是存放不同类型的集合体。2.结构体的定义与使用结构体的三种定义方式1.全部赋值;2.先定义,后赋值,不需要全部赋值; 3.常用赋初值方式如何访问结构体内的成员? stu1.chineseScore 结构体名字.成员名结构体相当于旧知识的集合体,只是纸老虎,多用多练不用怕!!!#include <stdio.h>#include...

2022-01-28 11:19:17 790

原创 数组初始化及逆序输出

第十个数组元素依次赋值为0,1,2,3,4,5,6,7,8,9,要求逆序输出#include <stdio.h>int main(){ int a[10]; int i; for(i=0;i<sizeof(a)/sizeof(a[0]);i++){ a[i]=i; } puts("当前位置"); for(i=0;i<sizeof(a)/sizeof(a[0]);i++){ printf("%d ",a[i]); } putchar('\n'

2022-01-27 14:38:53 202

原创 C语言函数

1.什么是函数 函数是一个功能模块,它实现某个功能的代码块包含起来,并起了一个函数名,供别人 调用。如printf函数,scanf函数。是程序运行当中包装起来的一个步骤。2.为什么要函数调用1.代码好看 2.容易定位问题 3.可复制性强 4.分工3.如何定义一个函数函数要先定义再使用,和变量一个道理定义:抓住三要素!牢牢记住!!!!!!!!! 1.函数名体现功能 2.参数列表.........

2022-01-27 14:28:39 438

原创 斐波那契数列

n>=2的时候,才可以使用形式an=an-1+an-2;所以要对a[0]a[1]赋初值。#include <stdio.h>/*1.数组初始化 int b[5] = {0};//(建议一般这么定义)2.数组打印for3.数组大小计算:sizeof(a)/sizeof(a[0])*/int main(){ int a[30]; int i; int arrayLen; arrayLen = sizeof(a)/sizeof(a[0]); a[...

2022-01-27 09:45:47 40

原创 数组和二维数组

1.为什么需要数组?只要大量数据不关心数字名称的时候 :计算1-100的和学生成绩管理 :分数协议 int openCMD={0xdf,0x11,0xfe,0x3e,0x64};2.数组的介绍数组是数据的集合: 1-100数组的数据是同类型的 :1到100都是整数数组的地址是连续的3.数组的基本使用数组的定义类型——如int数组名(命名规则和变量名一样)——如array数组大小——如[100]没有初始化的数组——int array[100];部分初始化

2022-01-27 09:34:13 787

原创 C语言循环方式

1.while循环格式:while(表达式) {语句;} /*循环体*/理解:当表达式为非 0(真)时,就重复执行循环体内的语句;当表达式为 0(假),则中止while 循环场景:爱你一万年(真的吗?)#include <stdio.h>int main(){ /* int i; while(1){ puts("爱你一万年"); i++; if(i==100){ break; } }*/ int time

2022-01-26 22:27:05 4661

原创 switch case

存在意义:条件并列时使用场景:1.学生成绩等级划分 2.小车的前进,后退,左转,右转学生成绩等级划分 用if_else实现:#include <stdio.h>int main(){ int score; puts("请输入成绩:"); scanf("%d",&score); if(score>=90 && score<=100){ puts("等级为‘A’"); }else if(score>=80 &

2022-01-26 22:03:25 90

原创 if_else

1.如何使用?场景:比较大小#include <stdio.h>int main(){ int data1; int data2; int i; printf("请输入两个数进行从小到大排序\n"); scanf("%d%d",&data1,&data2); if(data1 > data2){ printf("%d,%d\n",data2,data1); } if(data1 < data2){ printf("%d,%d

2022-01-26 21:52:50 89

原创 大写字母转小写字母(认识ASCII码)

getchar();获取一个字符#include <stdio.h>int main(){ char a = 'a'; char b = 'b'; char A = 'A'; char B = 'B'; printf("%c,%c,%c,%c\n",a,b,A,B); printf("a=%c,b=%c,A=%c,B=%c\n",a,b,A,B); puts("请输入一个大写字母"); scanf("%c",&a); b = a + 32; p

2022-01-26 21:24:54 570

原创 scanf/扫描键盘

注意问题:1.地址符号& 多个不同变量尽量分开写2.scanf双引号里面有什么占位符,输入的时候输入对应类型3.scanf双引号里面除了占位符,其他的都不要用#include <stdio.h>int main(){ int data; int data1; int data2; printf("请输入三个整数\n"); scanf("%d%d%d",&data,&data1,&data2); printf("data=%d

2022-01-26 21:15:19 65

原创 printf 和 puts

原样输出 :printf("123456\n"); puts("123456");带占位符输出:printf("请输入第%d个学生成绩\n"); puts不支持占位符代表:%d 十进制整数 %c 单个字符 输出一个字母 %s 多个字符%f 单精度小数 %p 打印地址区别:1.printf需要\n换行,puts自带换行 2.puts不支持带占位符输出...

2022-01-26 20:57:26 420

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除