- 博客(51)
- 收藏
- 关注
原创 APS保护
APS(Automatic Protection Switching, 自动保护倒换)是一种线性保护机制。对一个已经配置了APS功能的工作实体上,会预留一个保护实体,当工作实体之间发生信号失效或者信号劣化后,会将相应的流量倒换到保护实体上。APS协议用来在双向保护倒换时协调源宿双方的动作,使得源宿双方通过配合,共同完成保护倒换、倒换延迟、等待恢复等功能。APS协议报文固定在备份通道上发送,这样两端设备都知道接收到APS协议报文的通道是对方的备份通道,以判断两端的主用通道和备份通道配置的是否一致。
2024-10-24 10:04:41
1109
原创 OTN帧格式
OTN的帧结构与SDH有一点最大的不同,SDH的STM-N帧结构中N不同对应的帧结构不同,STM-4的列数是STM-1的4倍,但是帧频都是8000帧/秒。而OTN的ODUk帧格式不随着k的改变而改变,都是4*4080字节块状帧,但不同ODUk等级对应的帧频不同。OPUk中装载着客户的信息净荷,加上OPUk开销后成为OPUk帧(ODUk净荷),而OPUk帧加上ODUk开销和FA帧(帧定位字节)后成为ODUk帧(OTUk净荷),ODUk帧加上FEC(向前纠错码)后成为OTUk帧。
2024-08-22 10:33:04
1248
原创 光通信基本知识
VC(Virtual Container):在光通信OTN中,VC指的是一种虚拟容器,它是OTN层次结构中的一个基本单元,用于将用户承载的数据打成包并进行传输。SDH(Synchronous Digital Hierarchy):在光通信OTN中,SDH指的是一种数字传输标准,用于在光网络中传输语音、数据和视频等信息。ETH(Ethernet):ETH指的是一种局域网协议,它是OTN层次结构中的一种承载方式,用于将以太网数据打包并在OTN网络中进行传输。ODU可以进行各种数据处理,如数据压缩、差错校验等。
2024-02-18 16:32:03
595
原创 子线程循环 3 次,接着主线程循环 6 次,接着又回到子线程循环 3 次,接着再回到主线程又循环6 次,如此循环50次,试写出代码。
#include<stdio.h> #include<pthread.h>#include<unistd.h>pthread_mutex_t mutex;pthread_cond_t son_fi...
2022-03-10 21:57:51
261
原创 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
#include<stdio.h>#include<pthread.h>#include<stdlib.h>#include<unistd.h> .
2022-03-10 21:27:32
1130
原创 linux网络编程
1.基本概念1)网络模型2)基本协议第一部分称为网络层。主要包括Internet 协议(IP)、网际控制报文协议(ICMP)和地址解析协议(ARP) Internet 协议(IP)。网际控制报文协议(ICMP):允许网际路由器传输差错信息或测试报文。地址解析协议(ARP):它处于IP和数据链路层之间,根据ip地址找到mac地址。IP主要功能:数据传送 ,寻址 ,路由选择,数据报文的分段第二部分是传输层协议,包括传输控制协议和用户数据报文协议传输控制协议(TCP):
2022-03-09 21:02:37
8071
1
原创 Linux多线程编程
1)线程的基本操作1.pthread_create()#include <pthread.h> int pthread_create(pthread_t * tidp,const pthread_attr_t * attr,void*(*start_rtn)(void),void*arg)创建线程成功后返回值为0tidp:线程id,create会创建线程,并自动将线程id返回给tidpattr:线程属性,通常为NULLstart_rtn:线程要执行的函数,通常参数.
2022-03-07 21:28:39
731
原创 Linux进程间通信编程
进程间通信方式现在Linux使用的进程间通信方式包括:1、管道(pipe)和有名管道(FIFO)2、信号(signal)3、消息队列4、共享内存5、信号量6、套接字(socket)1.管道:管道是单向的、先进先出的,它把一个进程的输出和另一个进程的输入连接在一起。一个进程(写进程)在管道的尾部写入数据,另一个进程(读进程)从管道的头部读出数据。数据被一个进程读出后,将被从管道中删除。进程试图读空管道时,进程将阻塞。同样,管道已经满时,进程再试图向管道写入数据,进程
2022-03-05 21:21:07
548
原创 Linux进程控制编程
1.概念进程是一个具有一定独立功能的程序的一次运行活动,同时也是资源分配的最小单元;进程的状态:进程正在占用CPU:执行状态进程因为等待某个资源而睡眠:等待状态进程一切准备就绪等待cpu:就绪状态2.getpid()#include <sys/types.h>#include <unistd.h>pid_t getpid(void) 获取本进程IDpid_t getppid(void) 获取父进程ID3.fork()#inclu
2022-03-03 21:00:32
588
原创 (C)调用-Sqlite3实例
#include<stdio.h>#include<sqlite3.h>#include<stdlib.h>int create_table(sqlite3 *pdb){ char *sql=NULL; char *errmsg=NULL; sql="create table if not exists mytable (id integer primary key,name text);"; if(SQLITE_OK != sqlite3_ex.
2022-02-28 15:29:09
507
原创 数据库基本概念以及Sqlite3的使用基本操作
1.数据库概述数据库(DataBase,简记为DB)就是一个有结构的、集成的、可共享的统一管理的数据集合。所谓有结构的,指的是数据是按一定的模型组织起来的。所谓集成的,是指数据库中集中存放着企业各种各样的数据。所谓共享,指的是数据库中的数据可以被不同的用户使用。所谓统一管理的,指的是数据库由DBMS统一管理,任何数据访问都是通过DBMS来完成的。数据库管理系统 (DataBase Management System,DBMS): 所有访问数据库的请求都由DBMS来完成的。2.数据
2022-02-27 20:18:52
1393
原创 (C)两个文本数字相加
手动创建两个文本文件text1.txt,text2.txt,要求编程创建text3.txt,实现text1.txt和text2.txt文件中除去首行和末尾对应的数据相加,三个文本的内容如下1.若数字没有进位,可直接相加 1 #include<stdio.h> 2 int main()
2022-02-26 14:32:03
812
原创 (C)库函数-复制文件
1 #include<stdio.h> 2 int main(int argc,char **argv[]) 3 { 4 FILE *from; 5 FILE *to; 6 char ch; 7 if(argc!=3) 8 ...
2022-02-26 09:24:43
327
原创 linux系统调用--复制一个文件
#include<stdio.h> #include<fcntl.h> //open #include<unistd.h> //close read write #include<stdlib.h> //exit ...
2022-02-26 09:23:01
443
原创 Linux系统调用和c库函数对文件的操作
系统调用是指操作系统提供给用户的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的的服务。文件描述符是一个非负的整数,它是一个索引值,并指向内核中每个进程的记录表中; 一个进程启动时,都会打开三个文件: 标准输入: STDIN_FILENO 0 标准输出: STDOUT_FILENO 1 标准出错处理:STDERR_FILENO 2cre...
2022-02-25 19:53:40
517
原创 (C)排序
方法分类:内部排序:在内存中进行,适于小文件外部排序:使用内存和外存,适于大文件,内存不够用1.直接插入排序:将前n位看做一个有序序列,n+1位插入时,先从n位往前遍历,直到找到比n+1位小的数,此数后的数都往后移一位,将n+1插到此数后面,此时前n+1位为有序序列,重复此操作。2.希尔排序:1.先选定一个小于N的整数gap作为第一增量,然后将所有距离为gap的元素分在同一组,并对每一组的元素进行直接插入排序。然后再取一个比第一增量小的整数作为第二增量,重复上..
2022-02-23 19:52:58
217
原创 (C)链队列的基本操作
#include <stdio.h>#include <stdlib.h>struct dbl_node{ int num; struct dbl_node *prior; struct dbl_node *next;};typedef struct dbl_node Dblnode;typedef Dblnode * Dbllink;enum return_val{EMPTY_OK = 100,EMPTY_NO,POP_OK,POP_NO};v...
2022-02-22 20:46:24
88
原创 (C)链栈的基本操作
#include<stdio.h>#include<stdlib.h>#include<string.h>struct stack_data{ int num; char name[20];};struct stack_node{ int num; char name[20]; struct stack_node *next;}; typedef struct stack_node *Stack;typedef struct stack_dat.
2022-02-22 20:43:03
144
原创 (C)顺序循环队列的基本实现
#include<stdio.h>#include<stdlib.h> #define size 10enum return_val{malloc_ok,malloc_no, full_ok,full_no,empty_ok,empty_no,push_ok};struct queue_data{ int queue[size]; int rear; int front;};typedef struct queue_data Queue;int creat.
2022-02-22 19:17:48
224
原创 (C)顺序栈的基本操作
#include<stdio.h> #include<stdlib.h>#define size 10enum return_val{ create_ok=100,create_no,full_ok,full_no,empty_ok,empty_no,push_ok,push_no,pop_no,pop_ok};struct stack_struct{ int top; int stack_data[size];};typedef struct stack_.
2022-02-19 22:02:56
335
原创 (C)带头双向循环链表的基本操作
#include<stdio.h>#include<stdlib.h>#include<time.h>#define ok 1#define no 0struct node{ int num; char name[20]; char sex; struct node *next; struct node *prior;}; typedef struct node Node;typedef Node * Link;int create_lin.
2022-02-19 14:05:17
88
原创 (C)带头循环链表的基本操作
#include<stdio.h>#include<stdlib.h>#include<time.h>#define ok 1#define no 0struct node{ int num; char name[20]; char sex; struct node *next;}; typedef struct node Node;typedef Node * Link;int create_link(Link *head){ *hea.
2022-02-19 14:03:45
83
原创 (C)带头链表的基本操作
#include<stdio.h>#include<stdlib.h>#include<time.h>#define ok 1#define no 0struct node{ int num; char name[]; char sex; struct node *next;}; typedef struct node Node;typedef Node * Link;int create_link(Link *head){ *head .
2022-02-17 21:32:58
624
原创 (C)实现strlen函数
#include<stdio.h>#include<string.h>int mystrlen(char * str){ int count=0; while(*str!='\0') { count++; str++; } return count;}int main(){ char *s="abc"; int a=mystrlen(s); printf("%d",a); return 0; }
2022-02-16 20:56:34
274
原创 一级指针和二级指针使用区别
int a=1; a是一个整形变量a=1,&a=0x0001int *b=&a;b是一个指针,指向变量a,b存储的是a的地址b=&a=0x0001,*b=a=1,&b=0x0002int **c=&b;c是二级指针,指向指针b,c存储的b的地址c=&b=0x0002,*c=b=&a=0x0001,**c=*b=a=1,&c=0x0003...
2022-02-16 15:16:38
831
原创 (C)无头单链表的基本操作及完整过程
顺序表:即一维数组,顺序访问,可以随机存取(访问一组序列中的任意一个元素)。链表:不连续存储,每个表项由结点构成。若结构体里有指向结构体类型的指针,则只能指向自己。int,char类型的指针没有限制。如果指针需要修改或者返回,则函数带入的参数是二级指针。 1 #include<stdio.h> 2 #include<stdlib.h> 3 4 struct node{ 5 int age; 6 .
2022-02-15 15:52:38
346
原创 数组指针和指针数组
int *a[10]:指针数组,是一个数组,里面装着指针,表示每一个单元存放一个int类型的指针int (*a)[10]:数组指针,是一个指针,指向一个数组,
2022-02-15 09:25:33
135
原创 数值在计算机中的存储方式
指针在64位中占8个字节,在32位中占4个字节char *c[5]:指针数组,存放了5个指针的数组,占40个字节。char (*c) [5]:数组指针,指向一个存放五个元素的数组指针,占8个字节。结构体的内存对齐:以最大的数据类型为单位进行字节对齐。如果是结构体的嵌套,就将结构体展开,看最大的数据类型。例:Cp为指针,占8个字节。*p为结构体,占32字节。p->a占1个字节,p->e占8个字节。int c:16。说明c占16位,2个字节。数值在计算机内的存
2022-02-03 21:43:35
628
原创 计算机内存的分配区域
计算机内存的分配区域:栈:系统栈和函数栈 栈是会放满的堆:堆的空间要比栈大得多,由用户自己申请,由用户自己释放,寿命由用户自己决定。当指向的内存被释放掉以后,指针依然指着,但是内存已经没了。在函数里使用malloc时,也能返回创建的局部变量。在fun2()函数里malloc申请分配内存后,即使在main()里面free()也是没用的,free()仅仅释放了这个指针,并没有释放函数里的内存空间。静态全局区:静态变量和全局变量全局变量...
2022-01-30 13:45:30
424
原创 (C)数组,指针
数组:数组定义:由若干个相同类型的相关数据项按顺序存储在一起,构成数组(array) ;数组实际上是同种类型、有序的数据的集合。同一数组中的元素必须具有相同的数据类型,而且这组数据在内存中将占据一段连续的存储单元。下标值n表示为所在维的数组元素个数,该维的数组下标的上界是n-1;C语言中数组下标下界始终为0。维数是下标的个数。1.数组名后使用方括号括起来的常数表达式,不能用圆括号。int a(10); ×2.常数表达式表示元素的个数,即数组长度,而不是数组的上界。3.常数表达式中可以..
2022-01-25 20:49:13
573
原创 (C)参数顺序点,命令行参数,可变参数,递归函数,指针函数,函数指针
1.函数参数顺序点:输出顺序:从左往右求值顺序:从右往左。2.带参数的main函数和命令行参数argc为输入参数的个数,argv为输入参数的存储的地址3.可变参数列表调用参数表以前,定义一个va_list类型变量,对ap进行初始化,初始化完成后,ap指向可变参数表中的第一个参数(由va_start函数实现),获取参数,调用va_arg函数,第一个参数是ap,第二个参数是要获取的参数的指定类型,然后返回这个指定类型的值,并且把ap的位置指向列表的下一个变量位置...
2022-01-23 20:55:29
292
原创 (C)从一个字符串中读出第一次出现的整数
#include<stdio.h> #include<string.h> int main() { char buf[50]; char *b=buf; gets(buf); int flag=0; int i=0; int sum=0; while(buf[i]!='\0') { if...
2022-01-23 19:59:34
602
原创 (C)对于任意正整数都可以找出至少一串连续奇数,它们的和等于该整数的立方。以下程序验证[2,20]之间的数满足这一性质。
自己摸索写的。。。。#include<stdio.h> int main() { int n=0; int j=0; int sum=0; for(int i=2;i<21;i++) { n=i*i*i; for(j=1;j<n;j=j+2) { int k=j;
2022-01-22 17:05:08
911
原创 (C)关键字const,volatile,struct,union,enum
const:声明只读变量1.const int * a; == int const *a;*a(即所指的值)是不可以改变的,a(即所指值的地址)是可以改变的。在编译时会出错,显示(*a)++为只读变量,不可以修改,当将这条语句注释后,会输出其值。2.int * const a;(对于此类要先进行初始化)*a(即所指的值)是可以改变的,a(即所指值的地址)不可以改变。显示a为只读变量,所以要在一开始要对a进行初始化,且不能写a++。3.int ...
2022-01-21 22:02:54
1197
原创 (C)数据类型及范围,运算符,输入输出,变量初始化和存储类型
1.1 数据的表现形式在C中,数据有两种表现形式:常量和变量一.常量1.整型常量:12132.实型常量:1)十进制小数 :1.232)指数形式:1.23E3(1.23*10^3)3.字符常量:1)普通字符:‘d’,‘5’2)转义字符:\n-------换行\t -------空出一个tab键的位置\abc ----------abc为八进制,如\101十进制为65,是A的ASCII码值,则直接输出A\xabc--------abc为16进制,如\x4...
2022-01-19 21:24:10
624
原创 (c语言)指针的学习
#include<stdio.h>int main(){ int a=1,b=2,c,*p; c=a+b; p=&c; // printf("%d\n",c); // printf("%d\n",*p); // printf("%d\n",p); int *p2=&a; printf("&a=%d\n",&a); //&a=6487556 printf("*p2=%d\n",*p2); ...
2022-01-18 11:25:00
386
原创 (linux)gdb调试以及make的使用
gdb调试:gcc -g main.c -o main 在编译程序前加上“-g”为调试做准备gdb main 调试程序输入“list”显示代码,可缩写成“l” ,默认显示10行,接着再输入list或者回车可以继续显示list+行号 从此行号开始显示list+函数名 从此函数名开始显示回车的作用:重复执行上一次输入的语句设置断点:break(b)break ...
2022-01-17 20:07:16
2478
原创 linux的项目创建实例(加减乘除)
首先创建cau根目录,下面分别创建add,sub,mul,div,include,scripts目录和一个Makefile文件Makefile文件内容如下:直接vim Makefile即可 1 include scripts/Makefile 2 3 modules_make = $(MAKE) -C ..
2022-01-17 16:20:40
1221
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人