Hello,I trying to write a basic shared library feedhandler, but as a C novice,I’m struggling to understand the use of sd1() with a callback.Say I have a q function defined in my main thread:upd:{insert[`quotes;x]}If I were just sending data to a remote q process, I would usek(-h, (S)“upd”, data, (K)0);But I want to use a single process without a TCP socket. What eventfddo I pass to sd1 and how do I actually get my data from C into my updfunction via a callback?I’m using 32bit linux.Thanks,Josh
http://code.kx.com/wiki/Cookbook/InterfacingWithC#Callbacks
> What eventfd do I pass to sd1
create a new one:
d=eventfd(x->j,0)
every new file descriptor registered with sd1 needs a callback
>how do I actually get my data from C into my upd with write/read
the example from the wiki:
k(0,(S)“onCallback”,ki(d),kj(a),(K)0)
instead, use the required callback:
k(0,(S)“upd”,data,(K)0)
when data comes in to c, use write(d), with the address of the data to send to q and trigger the callback
write(x->i,&data,4) //4 byte address for l32
the registered callback for d can then use the address of data and call upd
K data;read(d,&data,4);k(0,(S)“upd”,data,(K)0)
hope that helps - untested code above.
jack