C 连接并发送两个外壳

C 连接并发送两个外壳,c,C,在看了下面的教程()之后,我意识到我无法让两个终端相互通信,并且在web上也找不到任何关于它的资源。更准确地说,我试图让两个终端使用相同的代码而不是相同的参数一起通信。 以下是我使用的两个函数: int connect_parent(void) { write(1, "my_pid: ", 9); my_putnbr(getpid()); write(1, "\nwaiting for enemy connection...\n",

在看了下面的教程()之后,我意识到我无法让两个终端相互通信,并且在web上也找不到任何关于它的资源。更准确地说,我试图让两个终端使用相同的代码而不是相同的参数一起通信。 以下是我使用的两个函数:

int connect_parent(void)
{
    write(1, "my_pid: ", 9);
    my_putnbr(getpid());
    write(1, "\nwaiting for enemy connection...\n", 34);
    pause();
    signal(SIGINT, handle_sigint);
}

int connect_child(char * char_pid)
{
    int parent_pid = my_getnbr(char_pid);
    int my_pid = getpid();
    int fd[2];

    if (pipe(fd) == -1) {
        write(2, "Pipe failed\n", 13);
        return 84;
    }
    close(fd[0]);
    write(fd[1], "test", 5);
    close(fd[1]);
    if (kill(parent_pid, SIGINT) != -1) {
        write(1, "my_pid: ", 9);
        my_putnbr(my_pid);
        write(1, "\nsuccessfully connected\n", 25);
        pause();
        return 0;
    }
    write(2, "Wrong pid\n", 11);
    return 84;
}
以下是我的主要功能:

int main(int argc, char ** argv)
{
    if (argc == 2) {
        if (my_strstr(argv[1], "-h") != 0)
            help_flag();
        if (error_handling(argv[1]) != 84) {
            connect_parent();
            return 0;
        } else
            return 84;
    } else if (argc == 3) {
        if (error_handling(argv[2]) != 84) {
            connect_child(argv[1]);
            return 0;
        } else
            return 84;
    }
    return 84;
}
第一个终端的父函数,第二个终端的子函数。 目标是在两个终端连接在一起时发送简单文本

此时,我的第一个终端正在使用
pause()
函数等待信号,当第二个终端发送SIGINT信号时,第一个终端退出

以下是我在第一个终端上运行的命令:

./navy ./pos1
下面是我对第二个执行的命令:

./navy <pid of the first terminal> ./pos2
/navy./pos2

您是否有我可以依赖的资源或如何执行此操作的说明?

两个程序都需要执行以下命令:

key_t key = ftok(<existing_file>, <random_number>); //for example: ftok("navy.c", 12);

char **text;

int memid = shmget(key, sizeof(char *), IPC_CREAT | IPC_EXCL | 0600);  //if this returns -1, an error occured

*text = shmat(memid, 0, 0); //You attach the pointer to the shared memory variable position
key\u t key=ftok(,)//例如:ftok(“navy.c”,12);
字符**文本;
int memid=shmget(键,大小(字符*),IPC|u CREAT | IPC|u EXCL | 0600)//如果返回-1,则发生错误
*text=shmat(memid,0,0)//将指针附加到共享内存变量位置
然后,您可以根据需要修改
文本。两个程序都将“看到”此变量


不要忘记在两次执行中
shmdt(*text)
(分离指针),并清除为共享变量执行创建的内存空间:
shmctl(memid,IPC\u RMID,NULL)

两个程序都需要执行以下命令行:

key_t key = ftok(<existing_file>, <random_number>); //for example: ftok("navy.c", 12);

char **text;

int memid = shmget(key, sizeof(char *), IPC_CREAT | IPC_EXCL | 0600);  //if this returns -1, an error occured

*text = shmat(memid, 0, 0); //You attach the pointer to the shared memory variable position
key\u t key=ftok(,)//例如:ftok(“navy.c”,12);
字符**文本;
int memid=shmget(键,大小(字符*),IPC|u CREAT | IPC|u EXCL | 0600)//如果返回-1,则发生错误
*text=shmat(memid,0,0)//将指针附加到共享内存变量位置
然后,您可以根据需要修改
文本。两个程序都将“看到”此变量


不要忘记在两次执行中
shmdt(*text)
(分离指针),并清除为共享变量执行创建的内存空间:
shmctl(memid,IPC\u RMID,NULL)

什么是
/navy
?@Barmar./navy是我的可执行文件的名称是,因此显示
navy
的代码。
main
看起来像什么?缺少哪些其他代码?您没有显示
main()
函数,它与参数有什么关系?如何将这两个进程连接在一起?然后只需将文本存储在共享内存变量中什么是
/navy
?@Barmar./navy是我的可执行文件的名称是,因此显示
navy
的代码。
main
看起来像什么?缺少哪些其他代码?您没有显示
main()
函数,它与参数有什么关系?如何将两个进程连接在一起?然后只需将文本存储在共享内存变量
ftok()
将返回系统中的可用内存地址,并将其存储在
key\t
variable您忘记了IPC中的C\u EXCL,我想是的,已编辑
ftok()
将返回系统中的可用内存地址,并将其存储在
key\t
变量中您忘记了IPC中的C,我认为这是正确的,已编辑!