gpt4 book ai didi

c - 父进程和子进程共享一个IPC共享内存

转载 作者:太空宇宙 更新时间:2023-11-04 04:54:45 24 4
gpt4 key购买 nike

我想使用共享内存来保存两个父子进程打印的字符。子进程将 'a','b','c','d' 保存到前四个字节中,然后父进程将 'A','B','C','D' 保存到接下来的四个字节中字节。但是不行。代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/shm.h>

int
main(int argc, char **argv) {
int shmid,i,j,off_a,off_b;
char *ptr;
pid_t pid;

shmid = shmget(IPC_PRIVATE, 200, SHM_W | SHM_R | IPC_CREAT);
if (shmid < 0) {
printf("cannot create shared memory\n");exit(-1);
}
if ((ptr = shmat(shmid, NULL, 0)) == (void *)-1) {
printf("cannot attach shared memory to address\n");
exit(-1);
}

if ((pid = fork()) < 0) {
printf("fork error\n");exit(-1);
} else if (pid) {

wait();

for (i = 'A', off_a = 0; i <= 'D'; i++ ,off_a += 1)
sprintf(ptr + off_a,"%c",i);

printf("RESULT:%s \n", ptr);

} else {
for (j = 'a', off_b = 4; j <= 'd'; j++, off_b += 1)
sprintf(ptr + off_b,"%c",j);

exit(0);

}
}

我认为结果是 abcdABCD,但是当我运行它时,它打印 ABCD,我使用 gdb 调试它,并将它写入文件,'a' 字符丢失了。为什么会这样?

0000000   A   B   C   D  \0   b   c   d  \0  \0  \0  \0  \0  \0  \0  \0
0000020 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
*

最佳答案

sprintf 添加尾随 NULL;

替换

sprintf(ptr + off_a,"%c",i);

*(ptr + off_a) = i;

与其他 sprintf 类似。

关于c - 父进程和子进程共享一个IPC共享内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10260344/

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