自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 问答 (1)
  • 收藏
  • 关注

原创 linux网络编程之字节序

进程间通信特点:依赖于内核,造成缺陷——无法实现多机通信。网络编程地址:由IP地址和端口号构成,端口号用来判断客户端接入哪个服务器。数据的交流:涉及到协议(http,tcp,udp),其实就是数据的格式,双方约定某种协议进行通信。linux网络编程:涉及到tcp协议和udp协议。socket套接字:用的最多的就是tcp协议和udp协议,其中tcp协议是面向连接的,udp是面向报文的,连接不可靠,但是udp的数据量很大,内存响应快,做精细操作一般用tcp协议,数据量大的话就用udp协议。...

2020-09-30 14:35:56 210

原创 线程条件控制实现线程的同步

与条件变量相关API        条件变量是线程另一可用的同步机制。条件变量给多个线程提供了一个会合的场所。条件变量与互斥量一起使用时,允许线程以无竞争的方式等待特定的条件发生。        条件本身是由互斥量保护的。线程在改变条件状态前必须首先锁住互斥量,其他线程在获得互斥量之前不会察觉到这种改变,因为必须锁定互斥量以后才能计算条件。  &nbsp

2020-09-29 14:43:05 277 1

原创 线程同步之互斥量加锁解锁 死锁

与互斥锁相关API      互斥量(mutex)从本质上来说是一把锁,在访问共享资源前对互斥量进行加锁,在访问完成后释放互斥量上的锁。对互斥量进行加锁后,任何其他试图再次对互斥量加锁的线程将会被阻塞直到当前线程释放该互斥锁。如果释放互斥锁时有多个线程阻塞,所有在该互斥锁上的阻塞线程都会变成可运行状态,第一个变为可运行状态的线程可以对互斥量加锁,其他线程将会看到互斥锁依然被锁住,只能回去等待它重新变为可用。在这种方式下,每次只有一个线程可以向前运

2020-09-29 13:25:39 772

转载 Linux上线程开发API概要(线程)

进程与线程      典型的UNIX/Linux进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情。有了多个控制线程后,在程序设计时可以把进程设计成在同一时刻做不止一件事,每个线程各自处理独立的任务。       进程是程序执行时的一个实例,是担当分配系统资源(CPU时间、内存等)的基本单位。在面向线程设计的系统中,进程本身不是基本运行单位,而是线程的容器。程序本身只是指令、

2020-09-28 15:50:46 163

原创 linux 信号和信号量编程

对于 Linux来说,实际信号是软中断,许多重要的程序都需要处理信号。信号,为 Linux 提供了一种处理异步事件的方法。比如,终端用户输入了 ctrl+c 来中断程序,会通过信号机制停止一个程序。信号概述信号的名字和编号:每个信号都有一个名字和编号,这些名字都以“SIG”开头,例如“SIGIO ”、“SIGCHLD”等等。信号定义在signal.h头文件中,信号名都定义为正整数。具体的信号名称可以使用kill -l来查看信号的名字以及序号,信号是从1开始编号的,不存在0号信号。kill对于信号0

2020-09-23 15:27:46 233

原创 IPC 共享内存和 消息队列(发送、接收、移除)以及键值的生成

一、消息对列消息队列,是消息的链接表,存放在内核中。一个消息队列由一个标识符(即队列ID)来标识。特点:消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级。消息队列独立于发送与接收进程。进程终止时,消息队列及其内容并不会被删除。消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。原型: #include <sys/msg.h> // 创建或打开消息队列:成功返回队列ID,失败返回-1,flag是打开队列的方式。 int m

2020-09-22 15:01:46 522

原创 进程间的通信IPC(无名管道和命名管道)

进程间的通信IPC介绍进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。一、管道管道,通常指无名管道,是 UNIX 系统IPC最古老的形式。(1)特点:它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。它只能用于具有亲缘关系的进程之间的通信(也是

2020-09-21 23:38:33 311

原创 system函数和popen函数使用方法

systemint system(const char *command);system()函数的返回值如下:成功,则返回进程的状态值;当sh不能执行时,返回127;失败返回-1;其实是封装后的exec,函数源代码在子进程调用exec函数,system使用更加简单,用法就是将./ 和后的内容(要执行的指令)放进代码中去。和exec不同的是,它运行完后还会返回到原来的代码处比如:#include<stdio.h>#include<stdlib.h>#include

2020-09-21 22:11:16 570

原创 linux进程---exec族函数(execl, execlp, execv, execvp, )解释和配合fork的使用

exec族函数函数的作用:我们用fork函数创建新进程后,经常会在新进程中调用exec函数去执行另外一个程序。当进程调用exec函数时,该进程被完全替换为新程序。因为调用exec函数并不创建新进程,所以前后进程的ID并没有改变。exec族函数定义:可以通过这个网站查询:linux函数查询功能:  在调用进程内部执行一个可执行文件。可执行文件既可以是二进制文件,也可以是任何Linux下可执行的脚本文件。函数族:  exec函数族分别是:execl, execlp, execle, execv,

2020-09-21 09:33:46 1631 2

原创 进程的退出方式以及僵尸进程和孤儿进程

(1)正常退出(2)异常退出                                       &nbsp

2020-09-20 17:25:56 256

原创 创建进程相关函数

fork函数pid_t fork(void);fork函数调用成功, 返回两次 返回值为0,代表当前进程是子进程 返回值是非负数,代表当前进程为父进程 调用失败,返回-1 返回值是pid_t 类型的,这里的pid_t类似一个类型,就像int型一样,int型定义的变量都是整型的,pid_t定义的类型都是进程号类型。这个语句的意思是定义了一个pid_t类型的变量pid,fork()函数返回一个进程号,这个进程号赋给了pid。代码示例#include&l

2020-09-20 15:21:22 939

转载 C程序的储存空间是如何分配?

可执行程序包括BSS段、数据段、代码段。在类UNIX系统下可使用size命令查看可执行文件的段大小信息。如size a.out:~/Desktop/MyC$ size a.out text data bss dec hex filename 1672 600 8 2280 8e8 a.out1.数据段存放已初始化的全局变量和静态变量,数据段属于静态内存分配。2.BSS段(Block Started by Symbol)存

2020-09-20 11:03:38 758 1

原创 Linux 进程、父进程、子进程

进程和程序的区别一、 进程是动态的,程序是静态的:程序是有序代码的集合,进程是程序的执行。进程有核心态/用户态。二、 进程是暂时的,程序是永久的;进程是一个状态变化的过程,程序可以长久保存三、进程和程序的组成不同,进程的组成包括程序、数据和进程控制块(即进程状态信息)什么是进程标识符        每个进程都有一个非负整型表示的唯一进程ID。因为进程ID标识符总是唯一的,常将其用作其他标识符的一部分以保证其唯一性,类

2020-09-20 10:49:03 1787

原创 标准C库对文件操作的引入

modeopen和fopen的区别fopen、fread、fwrite的使用(1)fopenFILE *fopen(const char *path, const char *mode);path:文件路径mode:以什么权限打开,要用双引号它的返回值并不是文件描述符若失败返回NULL若操作成功返回FILE指针操作方式和文件描述符类似(2)fwritesize_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *str

2020-09-20 10:16:16 171

原创 linux 写结构体到文件

将整数写入到文件#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include<stdio.h>#include <unistd.h>#include <string.h> #include <stdlib.h>int main(){ int fd; int data=100; int

2020-09-19 23:35:05 354

原创 实现linux cp 命令和修改配置文件

cp指令用来代码的拷贝以下由文件编程代码实现#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include<stdio.h>#include <unistd.h>#include <string.h> #include <stdlib.h>int main(int argc,char**argv){ int fdS

2020-09-19 22:43:53 419

原创 Linux文件编程(2)

文件打开创建补充(1)O_EXCLO_EXCL和O_CREAT配合使用若文件不存在则创建文件若文件存在则返回-1代码演示#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include<stdio.h>int main(){ int fd; fd=open("./file1",O_RDWR|O_CREAT|O_EXCL,0600);

2020-09-19 22:21:00 68

原创 Linux系统文件编程(1)

打开文件int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);open----返回的是文件描述符是整形数(文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描

2020-09-18 17:48:32 92

原创 Linux常用初级指令介绍

ctl+alt+t ----调出命令ctl+L ----清空命令ctl+shit+“加号” ----放大的字体ctl+“减号” ----减小字体ls ----列出当前文件下有哪些文件vi+空格+xxx.c ----创建名为xxx.c的.c文件gcc+空格+C文件名 ----编译这个文件,同时生成a.out这个程序名./ + 程序名 -----运行程序sh +空格+ -c + ./ +程序名 -----运行该程序gcc+

2020-09-18 16:04:03 130

原创 链表定义、链表的插入、链表的删除、链表的查找

链表的定义链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。它可以根据需要开辟内存单元。链表有一个“头指针”变量,以head表示,它存放一个地址。该地址指向一个元素。链表中每一个元素称为“结点”,每个结点都应包括两个部分:一为用户需要用的实际数据,二为下一个结点的地址。因此,head指向第一个元素:第一个元素又指向第二个元素;……,直到最后一个元素,该元素不再指向其它元素,它称为“表尾”,它的地址部分放一个“NULL”(表示“空地址”),链表到此结束。结构体形式struct test

2020-09-18 14:53:27 227

空空如也

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

TA关注的人

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