0
したがって、親によって作成されたパイプを介して、Cの親プロセスからPythonの子プロセスに文字列を送信しようとしています。その後、私は私のpythonの子供から親に戻ってそれを印刷する文字列を送り返したいと思います。C親からPythonの子にデータを送信し、パイプを使用して返す
これは私のC-コード:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
int main(int argc, char **argv, char **envp) {
pid_t childpid;
int status;
int test;
char *argument;
int fd[2];
char *numbers = "3,5,7\n";
argument = "./fork.py";
char *python[] = {argument, NULL};
test = 0;
pipe(fd); //Create pipe
childpid = fork();
if (childpid==(-1)) {
perror("fork");
return -1;
} else if (childpid==0) {
//in child
execvp(argument, python);
}
//in parent
write(fd[1], numbers, sizeof(numbers));
close(fd[1]);
waitpid(-1, &status, 0); //Wait for childprocess to finish
char buffer[1024];
while (read(fd[0], buffer, sizeof(buffer)) != 0) {} //Read pipe to buffer
if (test < 0) { //If failed print error message or success message
printf("Error: %s\n", buffer);
} else {
printf("%s\n", buffer);
}
return 0;
}
これは私のPythonコード(fork.py)です:
#!/usr/bin/env python3
import os
import sys
def main():
r, w = os.pipe()
os.read(r, 12)
os.close(r)
os.write(w, "This is a test")
os.close(w)
sys.exit(0)
if __name__ == '__main__':
main()
パイプをフォークしなければならないので、私は間違って何をやっていると、したがって、子供がアクセスできる?パイプにデータが渡されないか、Pythonのプロセスが何らかの方法でパイプにアクセスしてデータを取得できないようです。そしてはい、それはパイプでなければなりません。
これは私に、 'os.read'のpythonでの不良ファイル記述子エラーをもたらします。 – Alesfatalis
フォークする前にハンドルを閉じましたか? – Daniel
すべてのものが正常に動作し、ソリューションを実装しているサイトでエラーが発生しました。 – Alesfatalis