gpt4 book ai didi

无法使用 C 中的 POSIX 将整数从一个进程发送到另一个进程

转载 作者:行者123 更新时间:2023-12-02 01:50:04 25 4
gpt4 key购买 nike

我在 Linux 上使用 C 语言和 GCC 编译器。我有两个进程,我想将整数从一个进程传递到另一个进程,即从外部进程传递到中央进程,而不是中央进程应该打印它。但是我的代码不起作用。谁能告诉我如何纠正它?这是我的代码

中央.c

#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/msg.h>
#include<stdio.h>

#define MsgKey 2345

typedef struct data_struct
{
int temp;
}data;

void main(void)
{
data temp_msg;
int msgqid;

if(msgqid=msgget(MsgKey, 0600 | IPC_CREAT)<0)
{
printf("From Central Process: Msg queue failed");
}

msgrcv(msgqid,&temp_msg,sizeof(temp_msg),2,0);
printf("Value = %d\n",temp_msg.temp);

printf("Central process exiting\n");
}

外部.c

#include<sys/types.h> 
#include<sys/ipc.h>
#include<sys/msg.h>
#include<stdio.h>

#define MsgKey 2345

typedef struct data_struct
{
int temp;
}data;

void main(void)
{
data temp_msg;
int msgqid;

temp_msg.temp=5;

if(msgqid=msgget(MsgKey, 0600 | IPC_CREAT)<0)
{
printf("From External Process: Msg queue failed");
}

if(msgsnd(msgqid,&temp_msg,sizeof(temp_msg),0)<0)
{
printf("Error");
}
printf("External process exiting\n");
}

比我在终端上输入的要多

gcc -o central central.c
gcc -o external external.c
./central &
./external

我收到此“外部进程正在退出”,外部进程终止,而中央进程继续在后台运行。

最佳答案

来自 msgsnd 的 POSIX 文档:

The application shall ensure that the argument msgp points to a user-defined buffer that contains first a field of type long specifying the type of the message, and then a data portion that holds the data bytes of the message. The structure below is an example of what this user-defined buffer might look like:

struct mymsg {
long mtype; /* Message type. */
char mtext[1]; /* Message text. */
}

你没有遵循它,所以你的代码无法工作。添加 long结构开头的字段,并将其设置为 2因为这是您的接收者期望的消息类型。

同时将该结构定义移动到头文件中,以便您可以在两段代码之间共享它,而不是重复它。

 if(msgqid=msgget(MsgKey, 0600 | IPC_CREAT)<0)

在赋值周围添加括号(在两段代码中):

 if((msgqid=msgget(MsgKey, 0600 | IPC_CREAT)) < 0)

<并且其他比较运算符的优先级高于赋值运算符,因此如果没有括号,您的代码是不正确的 - 它将比较结果分配给 msgqid .

最后,ma​​in 返回一个 int ,从不void .

关于无法使用 C 中的 POSIX 将整数从一个进程发送到另一个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23307459/

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