secret
Last active

pass c-array via pipe

  • Download Gist
.gitignore
1 2
#
/echo_vertices
__main__.py
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
import struct, sys
 
from subprocess import Popen, PIPE
from threading import Thread
 
def pack(vertices, n):
yield struct.pack('i', n)
s = struct.Struct('i f f')
for v in vertices:
yield s.pack(*v)
 
def write(output_file, chunks):
for chunk in chunks:
output_file.write(chunk)
output_file.close()
 
def main():
try: n = int(sys.argv[1])
except IndexError:
n = 100
vertices = ((i,i+1,i+2) for i in range(n))
 
p = Popen(["./echo_vertices", "random", "arg"], stdin=PIPE, stdout=PIPE)
 
Thread(target=write, args=[p.stdin, pack(vertices, n)]).start()
 
for line in iter(p.stdout.readline, b''):
pass
p.stdout.close()
sys.stdout.buffer.write(line)
p.wait()
 
if __name__ == '__main__':
main()
echo_vertices.c
C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
/** http://stackoverflow.com/questions/4979421/subprocess-popen-invalid-argument-broken-pipe-while-comunicating-to-c-program */
#include<stdio.h>
#include<stdlib.h>
 
typedef struct {
int index;
float x;
float y;
} vertex;
 
int main(int argc, char* argv[]) {
int i;
vertex* VV;
int n = 0;
fread(&n, sizeof(int), 1, stdin);
VV =(vertex*) malloc(sizeof(vertex)*n);
fread(VV,sizeof(vertex),n,stdin);
 
for(i=0;i<n;i++)
printf(" %i , %f , %f\n",VV[i].index,VV[i].x,VV[i].y);
}

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.