gpt4 book ai didi

c - 不同.c文件之间的IPC进程间通信

转载 作者:太空宇宙 更新时间:2023-11-04 04:36:02 26 4
gpt4 key购买 nike

我现在无法提供代码,因为我目前正在脑海中研究这个想法并在互联网上四处乱逛。

我了解了进程间通信和使用共享内存在进程之间共享数据(特别是结构)。

但是,在对保存在不同 .c 文件中的程序使用 fork() 和 execv( ...) 后,我对如何与进程共享数据感到困惑。

如果我们将信号量键作为参数提供给另一个程序(成为子进程),我们是否能够使用 semget 访问共享内存?

最佳答案

要事第一。

  1. 根据实现,单个或多个源文件,.c 在您的情况下可以构成单个可执行文件。单个可执行文件运行一个进程。如果源在代码中完成了一个fork(),那么子进程就会被创建。所以,你的

    ...interprocess communication between different .c files

    不一定是两个 .c 文件,无论它们是作为单个项目还是作为两个不同的项目编译。

  2. 为了简单起见,假设您有两个不同的源文件,其中一个应该创建一个共享内存。

    #define SHMSPACE    35
    char *shm, *str;
    key_t key = 1234;

    //Create a memory segment to be shared
    if ((shmid = shmget(key, SHMSPACE, IPC_CREAT | 0666)) < 0)
    {
    perror("shmget failed");
    exit(1);
    }

    //Attach the segment to memory space.
    if ((shm = shmat(shmid, NULL, 0)) == (char *) -1)
    {
    perror("shmat failed");
    exit(1);
    }

    //Write something like A to Z in the shared memory for other process to read
    str = shm;
    for (c = 'A'; c <= 'Z'; c++) //c is declared as an int somewhere above.
    *str++ = c;
    *str = NULL;

    你的其他来源应该是:

    #define SHMSPACE    35
    char *shm, *str;
    key_t key = 1234;

    //Get the shared memory segment
    if ((shmid = shmget(key, SHMSPACE, 0666)) < 0)
    {
    perror("shmget failed");
    exit(1);
    }

    //Attach the segment to our data space.
    if ((shm = shmat(shmid, NULL, 0)) == (char *) -1)
    {
    perror("shmat");
    exit(1);
    }

    //Read what other process has put in the memory.
    for (str = shm; *str != NULL; s++)
    putchar(*str);

关于c - 不同.c文件之间的IPC进程间通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30524004/

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