
C语言
blog_w
与其临渊羡鱼,不如退而求网
展开
-
socket---UDP通信
通信流程:Server:1.创建套接字 — 在内核中创建一个socket结构体2.为套接字绑定地址信息在创建套接字创建的socket结构体中加入IP+PORT信息1.告诉操作系统主机收到的哪些数据应该交给当前的这个socket2.确定发送数据的源端地址信息3.接收数据当前进程从指定的socket接收缓冲区中取出数据4.发送数据将要发送的数据放到socket发送缓存区中,内核选择合适时候封装发送5.关闭套接字Client:1.创建套接字2.为套接字绑定地址信息 (大多数情况下会原创 2021-12-09 19:21:31 · 2206 阅读 · 0 评论 -
进程信号---阻塞信号
阻塞: 信号依然可以注册,只是暂时阻止信号被处理。在pcb中还有一个信号集合—阻塞集合;哪个信号在这个集合中被标记,则表示这个信号要阻塞,收到了这个信号则暂时不去处理。int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);//how:操作类型---要对阻塞集合进行的操作//SIG_BLOCK:将set集合中的信号添加到阻塞结合;block|=set//SIG_UNBLOCK:从阻塞结合中移除set中的信号 block &a原创 2021-12-07 10:41:25 · 969 阅读 · 0 评论 -
进程信号----自定义处理方式
处理: 说白了就是打断进程当前操作,然后执行信号的处理函数,执行完毕后回到原来的主控流程继续运行。处理方式:默认处理方式:执行默认的处理方式忽略处理方式:信号依然会注册只是处理方式变为空操作自定义处理方式:自己定义信号处理函数,修改信号的处理函数指针 #include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<signal.h> void sigcb(int no)原创 2021-11-28 22:56:56 · 338 阅读 · 0 评论 -
进程信号---kill命令
进程信号:原理:是一种中断机制,或者说是一种事件通知机制,在这里讲的是软件中断,通过信号通知进程发生了某个事件,打断进程当前的操作,去处理事件。一个信号对应一个事件,并且信号必须能够被识别Linux下信号种类:使用kill -l命令进行查看,62种1~31号:非可靠信号;34-64号:可靠信号信号的生命周期:产生,注册,注销,处理产生:硬件产生: ctrl+c,ctrl+\,ctrl+z软件产生: kill命令发送一个信号给进程;示例: kill -sigid pidkill杀死进程原创 2021-11-28 22:25:16 · 961 阅读 · 0 评论 -
进程间通信---共享内存
共享内存:目的: 用于进程间的数据共享原理: 开辟一块物理内存空间,各个进程将同一块物理内存空间映射到自己的虚拟地址空间中,通过虚拟地址进行访问,进而实现数据共享共享内存是最快的进程间通信方式,因为通过虚拟地址空间映射后,直接通过虚拟地址访问物理内存,相较于其他方式少了两部数据拷贝操作。操作流程:1.创建或打开共享内存int shmget(key_t key, size_t size, int shmflg);key:标识符—通过相同的标识符,多个进程可以打开同一块共享内存;size:要创建原创 2021-11-15 16:39:39 · 193 阅读 · 0 评论 -
进程间通信--命名管道
命名管道:可以用于同一主机上任意进程间通信—管道缓冲区具有标识符命名管道:mkfifo filename 创建一个管道文件命名管道本质上依然是内核中的一块缓存区,但是命名管道有名字具有标识符,而这个标识符就是一个可见于文件系统的管道类型文件,多个进程可以通过打开同一个管道文件访问同一块内核中的缓冲区实现通信代码操作:int mkfifo(char *path,int mode);对管道的读写操作,仍然是IO操作打开特性:若以只读方式打开命名管道文件,则会阻塞,直到这个管道文件被以写的方式打开原创 2021-11-09 17:01:15 · 283 阅读 · 0 评论 -
系统调用接口---IO
*int open(const char pathname, int flags, mode_t mode);open(文件名,选项标志,权限)pathname:文件路径名flags:标志位必选其一:O_RDONLY ,O_WRONLY, O_RDWR可选项:O_CREAT:如果文件不存在,则创建O_EXCL:跟O_EXCL一起使用,如果文件已经存在报错返回。O_TRUNC:打开文件时截断文件长度为0—清空内容O_APPEND:将写入设置为追加写。w+:O_RDWR| O_CREAT|原创 2021-11-04 21:27:02 · 109 阅读 · 0 评论 -
匿名管道----实例
ps -ef | grep pipeps -ef:将所有进程信息写入到标准输出grep pipe:不断循环从标准输入读取数据进行字符串匹配过滤shell进程中创建两个进程,一个进程运行ps,一个进程运行grep要将ps进程的数据,交给grep进程只能通过进程间通信完成—匿名管道流程:创建管道创建两个进程(不同进程,程序中体现为2个子进程,子进程通过父进程获得句柄),在各自进程中进行程序替换在程序替换之前,ps进程应该标准输出重定向到管道写入端,grep进程应该标准输入重定向到管道读取端父原创 2021-11-03 15:44:19 · 166 阅读 · 0 评论 -
模拟实现xshell(1)
流程1.捕捉用户键盘输入 [ ls -a -l]2.解析输入信息—得到命令名称,运行参数 [ls] [-a] [-l]3.创建子进程,在子进程通过命令名称进行程序替换(让子进程运行命令)4.进程等待,等待子进程退出,防止出现僵尸进程 #include<stdio.h> //printf原创 2021-11-02 22:16:06 · 370 阅读 · 0 评论 -
Linux:库
库的使用:使用-l选项指定要连接的库名称:gcc main.c -o main -ltestlib但是链接器在链接库文件生成可执行程序的时候,回到指定的一些路径下去找库文件,炸到了就会链接,找不到就会报错生成可执行程序时链接使用:1.库文件放在指定路径下: /usr/lib642.设置环境变量:export LIBRARY_PATH=$LIBRARY_PATH:./3.使用gcc的-L选项:gcc main.c -o main -L./ -ltestlib运行可执行程序时加载使用:仅针对动原创 2021-04-18 15:49:48 · 75 阅读 · 0 评论 -
Linux:进程等待
等待:父进程等待子进程退出。获取退出子进程的返回值,释放退出子进程资源,避免子进程成为僵尸进程。代码操作:int wait(int *status);int waitpid(pid_ t pid, int *status,int options)可以设置为非阻塞默认都是阻塞接口,等待子进程退出,如果没有退出,就一直等待。返回值:使用低1 6位,其中高8位返回值,低7位异常退出信号。WIFEXITED(status)--------判断WEXITSTATUS(status)--------获取原创 2021-04-08 20:57:24 · 100 阅读 · 0 评论 -
Linux :环境变量
环境变量:保存运行环境参数的变量;使程序运行环境配置更加灵活;以及可以通过环境变量实现进程间的小量数据通信(父子进程的传递)命令操作: env-查看环境变量,set 查看所有变量,echo-查看指定变量, export- 设置环境变量,unset-删除环境变量典型环境变量:PATH:程序运行的默认搜索路径-在命令行终端中输入命令名称可以直接执行对应名称的命令程序,实际上是因为shell捕捉到输入的命令名称之后,然后去PATH环境变量指定的路径下去找这个程序,找到了就运行,找不到就报命令没有找到的错误原创 2021-04-07 21:57:55 · 106 阅读 · 0 评论 -
链表的实现
头文件typedef int SLDataType;//定义节点:数据+指针typedef struct ListNode{ //数据 SLDataType _data; //指针 struct ListNode* _next;}ListNode;//链表typedef struct List{ //保存第一个节点的地址 ListNode* _head;}List;//创建节点ListNode* CreatListNode(SLDataType val);//节点原创 2021-01-28 17:08:40 · 86 阅读 · 0 评论 -
C语言:数据文件操作
1.文件类型在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。1 程序文件包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。2 数据文件文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。3 文件的打开和关闭3.1 文件指针缓冲文件系统中,关键的概念是“文件类型指针”,简称“文件指针”。每个被使用的文件都在内存中开辟了一个相应的原创 2020-12-07 16:10:46 · 1678 阅读 · 0 评论 -
动态内存开辟简单介绍
1.动态内存的介绍malloc和freeC语言提供了一个动态内存开辟的函数:void malloc(size_t size);这个函数向内存申请一块连续可用的空间:并返回指向这块空间的指针。如果开辟成功,则返回一个指向开辟好空间的指针。如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。返回值的类型是void ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。如果参数size 为0,malloc的行为是标准是未定义的,取决于编译器。c语原创 2020-12-07 13:56:13 · 366 阅读 · 0 评论 -
剖析浮点型在内存中的存储
剖析浮点型在内存中的存储浮点数的内存存储#include<stdio.h>int main(){ int n = 9; float *pFloat = (float *)&n; printf("n的值为:%d\n", n); printf("*pFloat的值为:%f\n", *pFloat); *pFloat = 9.0; printf("num的值为:%d\n", n); printf("*pFloat的值为:%f\n", *pFloat); system("原创 2020-11-30 22:17:27 · 125 阅读 · 0 评论