c-C语言:进程间传递指针来实现数据操作是否会有安全隐患?

问题描述

C语言:进程间传递指针来实现数据操作是否会有安全隐患?

涉及两个进程,A和B,A和B可通信。

进程A管理一个链表,A会把某个链表节点的一些特征参数发送给进程B,后面进程B会把一开始得到的节点特征发送回A,A再对链表进行遍历匹配,匹配对应的节点,进行操作。

如果A一开始把节点指针直接给B,B后面需要对节点操作时直接把指针发回给A,这样就不用遍历链表。但是这样做是不是不合理?就是是不是有安全性之类的问题?

解决方案

跨进程传递指针没有意义,对方进程拿到指针也访问不了内存。既然如此,为何要传。

解决方案二:

指针对本进程空间有效,跨进程不行,你可以用内存映射,管道等跨进程通讯

解决方案三:

想要进程之间传递指针,那么就需要用共享内存方式,这样多个进程都可以访问这一块空间,传递指针也是可以的

解决方案四:

相当于A把一个节点的地址给了B,B以后想对那个节点进行操作的时候,只要把节点地址告诉A,A就知道B需要操作哪个节点。类似ID的作用。

时间: 2024-12-03 17:18:55

c-C语言:进程间传递指针来实现数据操作是否会有安全隐患?的相关文章

c语言-C语言函数间用指针调用数值的问题

问题描述 C语言函数间用指针调用数值的问题 函数原型是这样的 void f(int * u): main里有这么一句 f(&x); 相当于是把变量x的地址传递给f(),没错吧,那问题来了,被赋值的是 * u还是u? 答案自然是u 我是这样想的, * u 作为一个int整体是f()的形式参数,那就将地址以int储存,那u岂不是这个地址的地址?到底哪里理解错误了? 解决方案 int *u,u是指针,他需要指向一个地址,&x,就是x的地址,int *u = &x,这个就是把x的地址,赋值

C#中使用SendMessage在进程间传递数据的实例

原文:C#中使用SendMessage在进程间传递数据的实例 1 新建解决方案SendMessageExample 在解决方案下面新建三个项目:CopyDataStruct,Receiver和Sender. 其中,CopyDataStruct项目的输出类型为"类库",Receiver和Sender项目的输出类型为"Windows 应用程序". 整个实例程序的结构如下图所示.   2 CopyDataStruct项目实现 定义结构体COPYDATASTRUCT,代码如

父子窗体间传递JSON格式的数据的代码_json

如果某个一级评分项包含评分子项,则点击该评分项时,再弹出一个新窗口,新窗体中列出了当前评分项的所有评分子项列表,供用户进行操作.用户操作完成后,点击"确定"按钮,则返回到父窗体,在子窗体中所有的操作结果,同时要带到父窗体中.同时,如果用户再次点击该评分项,则在弹出子窗体的同时,要将上次操作的结果绑定到对应的操作项上. 上面描述的例子,就涉及到了一个父子窗体间的数据传递.如何实现这一数据传递,当然有很多方法.这里只是记录一下在这个例子中我使用的方法.我的方法是在子窗体点击"确定

进程间通讯问题,内存共享的实现

问题描述 需要在多个进程传输数据,其实一个检测进程一直获取检测的数据,供其他进程及时读取使用,数据库不是很大,但是数据更新非常的频繁,考虑到效率问题,不知道用什么方法实现?暂时决定采用内存共享的方式实现.希望各位大虾多加指点.具体怎么实现比较好?需要注意哪些地方?如果有类似的源代码参考就最好了. 解决方案 解决方案二:方案1.使用WM_COPYDATA消息方案2.使用WriteProcessMemory(),ReadProcessMemory()访问其他进程的内存方案3.使用内存镜像文件解决方案

Chromium中跨进程文件句柄传递

实现说明 在Chromium跨进程架构下,也会有Browser/Renderer两个进程对相同文件进行操作的需求.比如Browser的某个任务依赖于Renderer端对指定文件的输出.而在POXIS下,允许不同进程间传递文件描述符(File Descriptor))的, 比如传递socket,或者普通文件,进而可以达到不需要重新打开文件,而对相同文件读写的效果(并不是分享文件句柄).Chromium对这个特性做了封装,也包括了Windows下的实现(也包括了Windows下的实现).涉及的基本结

Android:Service之AIDL传递系统基本类型数据

  什么是AIDL? 先来回顾一下,Android在本地的Service中如何与其它组件进行交互的,首先Service必须实现其onBind()方法,然后在onBind方法传递一个IBinder接口的实现,而在其它组件中使用bindService()绑定一个服务,再通过其中的参数ServiceConnection对象获取到Service中定义的IBinder接口的实现.那么与Service进行数据交互,其实就是传递一个IBinder,通过这个IBinder进行交互. 而现在就碰到一个问题,在同一

C++进程间共享数据实例_C 语言

本文实例讲述了C++进程间共享数据的实现方法,分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: int main(int argc, char *argv[])  {      //RecursiveDelete("C:\\20_128\\");      //SelfRun("runModel");      //进程间内存共享      LPCTSTR lpName= "hello";      LPCTSTR lpConten

Visual C++进程间数据通信的实现

在Windows系统中,各个应用程序(进程)之间常常需要交换.传递数据,这就要解决进程间的数据通信问题.在最初的16位Windows3.x系统中,所有Windows应用程序共享单一地址,任何进程都能够对这一共享地址空间的数据进行读写操作.随着Windwos98.WindowsNT.Windows2000等32位的操作系统的出现,规定每个进程都有自己的地址空间,一个Windows进程不能存取另一个进程的私有数据,也就是说,虽然两个进程可以用具有相同值的指针寻址,但所读写的只是它们各自的数据,这样就

如何实现进程间数据通讯技术

1.引言 在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯.WIN32 API提供了许多函数使我们能够方便高效地进行进程间的通讯,通过这些函数我们可以控制不同进程间的数据交换,就如同在WIN16中对本地进程进行读写操作一样. 典型的WIN16两进程可以通过共享内存来进行数据交换:(1)进程A将GlobalAlloc(GMEM_SHARE...)API分配一定长度的内存:(2)进程A将GlobalAlloc函数返回的句柄传递给进程B(通过一个登录消息):(3)进程B对这个句柄调用