如何在C(Windows)中从管道读取结构

如何在C(Windows)中从管道读取结构,c,windows,process,operating-system,pipe,C,Windows,Process,Operating System,Pipe,我将子进程的标准输入更改为管道的读取句柄。我在parent.c文件中创建了两端都是的管道,并使用管道的读取句柄更新了子进程的标准输入,如si.hStdInput=hReadPipe 我正在尝试将此结构写入管道: struct textShift{ char* text; int shift; }; while(1) { printf("Please enter your message:"); gets(ts.text); printf("Please en

我将子进程的标准输入更改为管道的读取句柄。我在parent.c文件中创建了两端都是的管道,并使用管道的读取句柄更新了子进程的标准输入,如si.hStdInput=hReadPipe

我正在尝试将此结构写入管道:

struct textShift{
   char* text;
   int shift;
};
while(1)
{
    printf("Please enter your message:");
    gets(ts.text);
    printf("Please enter shift number:");
    scanf("%d",&ts.shift);
    bytesToWrite = strlen(ts.text)+1; 
    WriteFile(hWritePipe[0], &ts, bytesToWrite, &bytesWritten,NULL); 
    printf("number of bytes: %d\n number of bytes successfully sent: %d",bytesToWrite, bytesWritten);
    printf("%s", ts.text);
}
以下是父进程写入管道的方式:

struct textShift{
   char* text;
   int shift;
};
while(1)
{
    printf("Please enter your message:");
    gets(ts.text);
    printf("Please enter shift number:");
    scanf("%d",&ts.shift);
    bytesToWrite = strlen(ts.text)+1; 
    WriteFile(hWritePipe[0], &ts, bytesToWrite, &bytesWritten,NULL); 
    printf("number of bytes: %d\n number of bytes successfully sent: %d",bytesToWrite, bytesWritten);
    printf("%s", ts.text);
}
但是,我不知道如何在我的子进程中读取此结构。对于字符串,我在子进程文件中使用getchar:

int main()

{
char message[100];
int i;
while(1)
{
    for(i=0; (message[i]=getchar())!=0; i++){}

    printf("message from parent: %s", message);

}

system("pause");
return 0;
}

如何从子进程中的管道获取此结构?

您需要打开管道的另一端,并使用ReadFile读取它。您的代码要求缓冲区溢出,BTWI在parent.c文件中创建两端的管道,并使用管道的读取句柄(如si.hStdInput=hReadPipe;)更新子级的标准输入。若要达到读取管道的控制柄,是否应在父级中将其设置为全局?抱歉,我已更新了问题。您需要准确显示如何将管道的读取端传输给子级。需要对其进行保护,并使句柄可继承。显示我们需要复制的所有代码。阅读有关SSCCE的内容。如果您确实想写入/读取结构,则传输的数据将是指针和
int
。很简单。但似乎您还需要其他内容:由第一个字段
text
指向的C字符串,然后是第二个字段的
int