내 C 코드를 파이썬 코드와 통신하려고합니다. 내 C 코드에서 이름 파이프를 만들고 파이썬에 보내면 파이썬이 그것을 출력합니다. 나는 파이썬에서 이름 붙여진 파이프를 만들고 C가 그것을 읽는 것과 같은 일을하고 싶다.하지만 내 프로그램이 멈추는 것처럼 보인다. (나는 이것들을 한 번에하고 싶다.) 그러므로 나는 프로세스를 사용하고있다.프로세스를 사용할 때 프로그램이 멈 춥니 다
내 C 코드 :
int main(void) {
int pid;
FILE * fp;
char *calledPython="./a.py";
char *pythonArgs[]={"python",calledPython,"a","b","c",NULL};
FILE * fp2;
char str[40];
pid = fork();
if(pid == 0) {
mkfifo("./test",0666);
fp = fopen("./test","w");
fprintf(fp,"Hello\n");
fprintf(fp,"World\n");
}
else {
execvp("python",pythonArgs);
// if we get here it misfired
perror("Python execution");
kill(pid,SIGKILL);
}
fp2 = fopen("./test2","r");
if(fp2 == NULL) {
printf("NUll\n");
}
else {
fscanf(fp2, "%s", str);
printf("received from test2 %s\n", str);
}
fclose(fp);
return 0;
}
내 파이썬 코드 : ./test 초기 네임드 파이프가
#!/usr/bin/python
import os, sys
with open("./test") as fp:
for line in fp:
print line
path = "./test2"
os.mkfifo(path)
fifo = open(path,"w")
fifo.write("Message from the sender\n")
fifo.close()
는 파이썬에서 판독 ./test2 번째 네임드 파이프 C는이다 . 내가 파이썬에서 내 두 번째 파이프에 쓰기 한 번에 읽어 soposed 그러나, 내 프로그램이 중단 :
path = "./test2"
os.mkfifo(path)
fifo = open(path,"w")
fifo.write("Message from the sender\n")
fifo.close()
내가 터미널에서 얻을 출력은 : 나는 다시 실행하면
NUll
Hello
World
, 나는 단순히 빈 줄 (아무것도 인쇄 전혀)를 얻는다. 부모 프로세스에서 두 번째 명명 된 파이프를 열려고 시도했지만별로 변하지 않는 것 같습니다. 내가 어디서 잘못 됐는지 모르겠다. 어떤 생각?
이것은 경쟁 조건이 많은 것처럼 보입니다. – melpomene