Day32、IPC进程间通信(共享内存)、网络基础知识

本文介绍了进程间的共享内存通信机制,包括关键函数如ftok、shmget、shmat和shmdt的使用,并通过示例代码展示如何进行共享内存通信。此外,还概述了TCP/IP协议的基本概念及网络层的基本知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、            共享内存

两个或者更多进程,共享同一块由系统内核负责维护的内存区域,其地址空间通常被映射到堆和栈之间

ftok (3)参见消息队列

shmget(2)

#include <sys/ipc.h>

#include <sys/shm.h>

int shmget(key_t key, size_t size, int shmflg);

功能:分配一段共享内存空间

参数:

Shmflg:参见消息队列   取0是只获取

key:ftok的返回值

size:要映射的内存的长度,以页的长度为单位

返回值:

共享内存的id

-1 代表失败

Shmat(2)shmdt(2)

#include <sys/types.h>

#include <sys/shm.h>

void *shmat(int shmid, const void *shmaddr, int shmflg);

功能:获取到共享内存映射到进程的虚拟地址

参数:

Shmid :函数shmget的返回值

Shmflg:  SHM_RDONLY:共享内存只读    0:读写方式共享内存

Shmaddr:NULL由内核来指定

返回值: (void *) -1 失败

 

 

int shmdt(const void *shmaddr);

功能:解除共享内存的映射

参数:shmaddr:shmat函数的返回值

返回值:

举例:使用共享内存进行进程间通讯  write.c Read.c

write.c

  1 #include<stdio.h>

  2#include<sys/types.h>

  3 #include<sys/ipc.h>

  4 #include<string.h>

  5 #include<sys/shm.h>

  6 int main(){

  7     key_t key;

  8     int shmid;

  9     //产生一个键值

 10     key=ftok(".",21);

 11     if(key==-1){

 12         perror("ftok");

 13         return 1;

 14     }

 15     //获取键值对应的共享内存的id

 16     shmid=shmget(key,1024,IPC_CREAT|0664);

 17     if(shmid==-1){

 18         perror("shmget");

 19         return 2;

 20     }

 21     void *p=shmat(shmid,NULL,0);

 22     if(p==(void *)-1){

 23         perror("shmat");

 24         return 3;

 25     }

 26     //向共享内存的空间里写内容

 27     strcpy(p,"this is a test! \n");

 28     //解除映射

 29     shmdt(p);

 30     p=NULL;

 31     return 0;

 32 }

tarena@tarena-virtual-machine:~$ ./a.out

tarena@tarena-virtual-machine:~$ ipcs

 

------ Shared Memory Segments --------

key        shmid      owner     perms      bytes      nattch    status      

0x00000000 0         tarena     700        76800      2         dest        

0x15012dff 163845    tarena     664        1024       0                      

664是创建的内存地址空间

 

Read.c

  1 #include<stdio.h>

  2#include<sys/types.h>

  3 #include<sys/ipc.h>

  4 #include<sys/shm.h>

  5 int main(){

  6     key_t key;

  7     int shmid;

  8

  9     key=ftok(".",21);

 10     if(key==-1){

 11         perror("ftok");

 12         return 1;

 13     }

 14     shmid=shmget(key,1024,0);

 15     if(shmid==-1){

 16         perror("shmget");

 17         return 2;

 18     }

 19     void *p=shmat(shmid,NULL,SHM_RDONLY);

 20     if(p==(void *)-1){

 21         perror("shmat");

 22         return 3;

 23     }

 24     char *str=(char *)p;

 25     printf("%s\n",str);

 26     shmdt(p);

 27     p=NULL;

 28     return 0;

 29 }

tarena@tarena-virtual-machine:~$ gcc write.c

tarena@tarena-virtual-machine:~$ ./a.out

this is a test!

 

补充:

删除消息队列、共享内存

ipcrm(1)

ipcrm –m  (shmid)163845

 

二、网络基础知识

1、 协议(规则)

网络通讯中,使用的是TCP/IP协议簇

TCP/IP协议分为四层

链路层:(链路层和物理层)

物理层规定了一些电器规则

链路层规定了设备驱动程序、以太网帧

网络层:

传输层:

应用层:

端口号:服务器软件必须监听端口号

每一块网卡都有自己的一个身份证,叫做MAC地址(物理地址)

Sudo ifconfig

硬件地址 00:0c:29:b9:98:2b

用到的地址是ip地址: inet 地址:192.168.65.129  是逻辑地址

需要把ip地址和MAC地址做绑定

2、 ip地址的分类

ip地址分为网络号和主机号

如果主机号为全0,代表网段号,全1为这个网段的广播号

ip地址分类


在网络通讯中,首先找到要通讯的主机的ip地址,根据ip地址确定了要通讯的主机。需要根这台机器上的某个进程通讯时,则需要这个进程监听的端口号。

ip地址+端口号  socketpair

ip地址:私有ip地址(局域)  、公有ip地址(公网)

子网掩码:用来区分子网

Ip地址和i子网掩码做与操作,得出来的是子网网段

Ip  140.252.20.68/24

Ip地址是140.252.20.68

子网掩码是255.255.255.0

网络号是:140.252.20.0

同一网段的ip范围:140.252.20.0~255。去掉主机号全0和全1

 

集线器:(HUB)简单的将物理电信号放大分流作用(物理层交换)

交换机:链路层交换(二层交换)

路由器:IP数据报(三层交换)

 

ARP地址解析协议:实现物理地址和IP地址的转换

RARP反地址解析协议:

 

 

 

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在 IT 领域,文档格式转换是常见需求,尤其在处理多种文件类型时。本文将聚焦于利用 Java 技术栈,尤其是 Apache POI iTextPDF 库,实现 doc、xls(涵盖 Excel 2003 及 Excel 2007+)以及 txt、图片等格式文件向 PDF 的转换,并实现在线浏览功能。 先从 Apache POI 说起,它是一个强大的 Java 库,专注于处理 Microsoft Office 格式文件,比如 doc xls。Apache POI 提供了 HSSF XSSF 两个 API,其中 HSSF 用于读写老版本的 BIFF8 格式(Excel 97-2003),XSSF 则针对新的 XML 格式(Excel 2007+)。这两个 API 均具备读取写入工作表、单元格、公式、样式等功能。读取 Excel 文件时,可通过创建 HSSFWorkbook 或 XSSFWorkbook 对象来打开相应格式的文件,进而遍历工作簿中的每个 Sheet,获取行列数据。写入 Excel 文件时,创建新的 Workbook 对象,添加 Sheet、Row Cell,即可构建新 Excel 文件。 再看 iTextPDF,它是一个用于生成修改 PDF 文档的 Java 库,拥有丰富的 API。创建 PDF 文档时,借助 Document 对象,可定义页面尺寸、边距等属性来定制 PDF 外观。添加内容方面,可使用 Paragraph、List、Table 等元素将文本、列表表格加入 PDF,图片可通过 Image 类加载插入。iTextPDF 支持多种字体样式,可设置文本颜色、大小、样式等。此外,iTextPDF 的 TextRenderer 类能将 HTML、
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值