python 读取共享内存
测试环境 centos7 python3.6.5
首先使用c创建内存,这里的方法是:作为参数读一个二进制数据文件进去,把文件的内容作为共享内存的内容
定义块
#include <stdio.h>
#include <sys/shm.h>
#include <string.h> int main(int argc, char *argv[])
{
int id = ;
char *data = NULL;
FILE *fp = NULL;
int totle_len = ;
int len = ;
char buf[] = {}; if (argc < )
{
printf("args too less\n");
return ;
} id = shmget(, * * , IPC_CREAT | );
if (id < )
{
printf("get id failed\n");
return ;
} data = shmat(id, NULL, );
if (data == NULL)
{
printf("shamt failed\n");
return ;
} fp = fopen(argv[], "rb");
if (fp == NULL)
{
printf("open %s failed\n", argv[]);
return ;
} while (totle_len <= + * * )
{
len = fread(buf, , , fp);
if (len <= )
{
break;
}
memcpy(data + totle_len, buf, len);
totle_len += len;
} fclose(fp);
return ;
}
使用python读取:
from ctypes import *
import numpy as npimport codecs
import datetime SHM_SIZE = 1024*1024*20
SHM_KEY = 123559
OUTFILE="httpd_cdorked_config.bin"
try:
rt = CDLL('librt.so')
except:
rt = CDLL('librt.so.1')
shmget = rt.shmget
shmget.argtypes = [c_int, c_size_t, c_int]
shmget.restype = c_int
shmat = rt.shmat
shmat.argtypes = [c_int, POINTER(c_void_p), c_int]
shmat.restype = c_void_p shmid = shmget(SHM_KEY, SHM_SIZE, 0o666)
if shmid < 0:
print ("System not infected")
else:
begin_time=datetime.datetime.now()
addr = shmat(shmid, None, 0)
f=open(OUTFILE, 'wb')
rate=int.from_bytes(string_at(addr,4), byteorder='little', signed=True) #这里数据文件是小端int16类型
len_a=int.from_bytes(string_at(addr+4,4), byteorder='little', signed=True)
len_b=int.from_bytes(string_at(addr+8,4), byteorder='little', signed=True)
print(rate,len_a,len_b)
f.write(string_at(addr+12,SHM_SIZE))
f.close()
#print ("Dumped %d bytes in %s" % (SHM_SIZE, OUTFILE))
print("Success!",datetime.datetime.now()-begin_time)
块的大小和块号可以设置,注意读取的时候 二进制文件的数据格式要保持一致否则读不出来正确的东西
python 读取共享内存的更多相关文章
- Python实现共享内存通信方式
创建共享内存python文件: import mmap import contextlib import time with contextlib.closing(mmap.mmap(-1, 100, ...
- python读取写入内存方法SringIO,BytesIO
python中不仅仅可以在磁盘中写入文件,还允许直接在内存中直接写入数据:需要借助StringIO和BytesIO来实现: 1.直接操作StringIO from io import StringIO ...
- python读取指定内存的内容
import ctypes as ct t = ct.string_at(0x211000, 20) # (addr, size) print t 最好不要用解释性语言来开发底层,一般用C.
- Linux进程间通信(六):共享内存 shmget()、shmat()、shmdt()、shmctl()
下面将讲解进程间通信的另一种方式,使用共享内存. 一.什么是共享内存 顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存.共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式 ...
- linux进程间通信-共享内存
转载:http://www.cnblogs.com/fangshenghui/p/4039720.html 一 共享内存介绍 共享内存可以从字面上去理解,就把一片逻辑内存共享出来,让不同的进程去访问它 ...
- System V IPC(3)-共享内存
一.概述 1.共享内存允许多个进程共享物理内存的同一块内存区. 2.与管道和消息队列不同,共享内存 ...
- Linux进程间通信之共享内存
一,共享内存 内核管理一片物理内存,允许不同的进程同时映射,多个进程可以映射同一块内存,被多个进程同时映射的物理内存,即共享内存. 映射物理内存叫挂接,用完以后解除映射叫脱接. 1,共享内存的特点 ...
- Windows共享内存示例
共享内存主要是通过映射机制实现的. Windows 下进程的地址空间在逻辑上是相互隔离的,但在物理上却是重叠的.所谓的重叠是指同一块内存区域可能被多个进程同时使用.当调用 CreateFileMapp ...
- Linux下用信号量实现对共享内存的访问保护
转自:http://www.cppblog.com/zjl-1026-2001/archive/2010/03/03/108768.html 最近一直在研究多进程间通过共享内存来实现通信的事情,以便高 ...
随机推荐
- luogu2580 于是他错误的点名开始了 Trie树
模板题 #include <iostream> #include <cstring> #include <cstdio> using namespace std; ...
- Leetcode 451.根据字符出现频率排序
根据字符出现频率排序 给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 示例 1: 输入: "tree" 输出: "eert" 解释: 'e'出现两次 ...
- ICCID
ICCID:Integrate circuit card identity 集成电路卡识别码(固化在手机SIM卡中) ICCID为IC卡的唯一识别号码,共有20位数字+英文组成,其编码格式为:XXX ...
- DefaultTransactionStatus源码
package org.springframework.transaction.support; import org.springframework.transaction.NestedTransa ...
- 我们为什么要研究docker
一.docker整体概述 Docker会是改变世界的那只"箱子"吗? 是什么:世界领先的软件容器平台: 开发者使用docker可以解决"在我的机器上没问题" ...
- ACM程序设计选修课——1058: Lucky Sequence(思考)
1058: Lucky Sequence Time Limit: 10 Sec Memory Limit: 64 MB Submit: 52 Solved: 6 [Submit][Status][ ...
- [luoguP2147] [SDOI2008]Cave 洞穴勘测(并查集 || lct)
传送门 1.并查集骗分(数据太水,比正解还快...) 我们知道,并查集有一步操作叫“路径压缩”,但是本题的并查集我们不能路径压缩,否则就无法进行Destroy操作.那每一步操作我们应该怎么做呢? 对于 ...
- BZOJ1068 [SCOI2007]压缩 【区间dp】
题目 给一个由小写字母组成的字符串,我们可以用一种简单的方法来压缩其中的重复信息.压缩后的字符串除了小 写字母外还可以(但不必)包含大写字母R与M,其中M标记重复串的开始,R重复从上一个M(如果当前位 ...
- 平面凸包Graham算法
板题hdu1348Wall 平面凸包问题是计算几何中的一个经典问题 具体就是给出平面上的多个点,求一个最小的凸多边形,使得其包含所有的点 具体形象就类似平面上有若干柱子,一个人用绳子从外围将其紧紧缠绕 ...
- [BZOJ4318] WJMZBMR打osu! / Easy (期望DP)
题目链接 Solution Wa,我是真的被期望折服了,感觉这道题拿来练手正好. DP的难度可做又巧妙... 我们定义: \(f[i]\) 代表到第 \(i\) 次点击的时候的最大答案. \(g[i] ...