gpt4 book ai didi

c - 使用共享内存将 addrinfo 结构从子级传递到父级

转载 作者:太空狗 更新时间:2023-10-29 16:03:47 25 4
gpt4 key购买 nike

我想使用如下共享内存将 getaddrinfo 结构 (*res) 的输出传递到父(从子)进程

pid = fork();
if (pid == 0)
{
.....
iStatus = getaddrinfo(argv[1], NULL, &hints, &servinfoC);
...
shmid = shmget(GETADDR_SHM_KEY, SHMSZ, IPC_CREAT | 0666);
....
shmC = shmat(shmid, (void*)NULL, 0));
memcpy(shmC, servinfoC, sizeof(struct addrinfo));
freeaddrinfo (servinfoC);
}
else
{
struct addrinfo *servinfoP;
while ((pid = waitpid (pid, &status, WUNTRACED | WCONTINUED)) > 0)
shmid = shmget(GETADDR_SHM_KEY, SHMSZ, 0666 | IPC_CREAT);
shmP = shmat(shmid, (void*)NULL, 0));

/*HELP Copy shmP to servinfoP struct*/

}

我试过 memcpy 但它没有帮助,因为 addrinfo 需要内存分配。

预先感谢您的时间和帮助

问候马诺杰

最佳答案

这是行不通的。 addrinfo 结构包含指向其他内存区域的指针,在其之上是一个结果链表。如果你想通过共享内存传递它,你需要将它展平。

例如:

struct addrinfo_flat
{
int ai_family;
int ai_socktype;
int ai_protocol;
struct sockaddr_storage ai_addr;
socklen_t ai_addrlen;
};

struct addrinfo_flags *addrs = (struct addrinfo_flat*)shmC;
addrs->ai_family = ai->ai_family;
addrs->ai_socktype = ai->ai_socktype;
addrs->ai_protocol = ai->ai_protocol;
memcpy(&addrs->ai_addr, ai->ai_addr, ai->ai_addrlen);
addrs->ai_addrlen = ai->ai_addrlen;

(留下多个结果作为练习)

关于c - 使用共享内存将 addrinfo 结构从子级传递到父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7145266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com