簡體   English   中英

如何通過 EXECL 從一個進程向另一個進程發送連續的數據流

[英]How to send continuous stream of data from one process to another via EXECL

我正在編寫 C 程序,它不斷生成兩個名為stateNametimer字符串值(速率為每秒五次)。 我需要將它們連接起來並將它們傳遞給另一個名為ProcessNo3_TEST進程,該進程負責標記化並顯示它們。

問題是我不知道如何通過execl連續傳遞它們。 我進行了幾次嘗試,但沒有一次成功。 這是我的代碼,適用於一對值(例如UP298 ):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define READ 0
#define WRITE 1

int FIFO[2];
char fileDescriptor[10];

char* stringMaker( char *s1,char *s2 );

int main()
{
    char lengthInChar[15],msg[200];
    int msgLength,i;
    char *stateName, *timer;
    if (pipe(FIFO) == -1)
    {
        printf("cannot create pipe\n");
        exit(1);
    }
    sprintf(fileDescriptor, "%d", FIFO[READ]);

    stateName = "UP2";              // for instance
    timer = "98";                   // for instance

    msgLength = strlen(stateName) + strlen(timer) +3;
    strcpy(msg, stringMaker(stateName, timer) );
    write(FIFO[WRITE], msg, msgLength);

    switch (fork())
    {
    case 0:
        sprintf(lengthInChar, "%d", msgLength);
        execl("ProcessNo3_TEST", "ProcessNo3_TEST", lengthInChar, fileDescriptor, NULL);
        exit(1);
    case -1:
        perror("fork() failed-->");
        exit(2);
    default:
        break;
    }
    sleep(10);
    exit(0);
}

char* stringMaker( char *s1,char *s2 )
{
    char *s3;
    strcpy(s3,s1);
    strcat(s3,"-");
    strcat(s3,s2);
    strcat(s3,"-");
    strcat(s3,"\0");
    return s3;
}

有人可以幫忙嗎?

(順便說一下,我在 Windows 上運行 CygWin)

- - - - - 更新 - - - - - - -

正如下面評論中所建議的,我找到了一個很好的fdopen()示例,它解決了我的問題。 ( 鏈接)

盡管可以安排將一個管道末端的文件描述符編號(以字符串形式)作為程序參數傳遞,但通常人們會改為重定向子進程的標准流以讀取(在這種情況下)或寫入管道。 這通常是通過dup2()實現的,您可以將其應用於子進程,在 fork 之后但在execl()之前。

然后父進程和子進程通過管道進行通信。 在這種情況下,父級寫入寫入端,子級從讀取端讀取。 一個或兩個都可以通過將其文件描述符傳遞給fdopen()來將其文件描述符包裝在流中。 然后你可以使用 stdio 函數。 還要注意,在 fork 之后,每個進程都應該關閉它不打算使用的管道端的 FD。

如果設置為使用 execl() (通常人們不喜歡這樣做,但有時它有好處),那么您應該使用命名管道而不是匿名管道。 在 execl() 之后,匿名管道端丟失。 但是如果你有一個命名管道,你可以將它的名稱作為參數傳遞給 execl(),在子進程中打開它並在那里使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM