1#include <stdio.h> 2#include <sys/stat.h> 3#include <unistd.h> 4#include <errno.h> 5#include <libproc.h> 6 7int main(){ 8 int pipe_fds[2]; 9 if (pipe(&pipe_fds[0]) < 0) { 10 perror("pipe"); 11 goto fail; 12 } 13 struct pipe_fdinfo pdinfo; 14 /* from the headers 15 int proc_pidfdinfo(int pid, int fd, int flavor, void * buffer, int buffersize) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0); 16 */ 17 int mypid = getpid(); 18 int flavor = PROC_PIDFDPIPEINFO; 19 int nv = proc_pidfdinfo(mypid, pipe_fds[0], flavor, (void *) &pdinfo, sizeof(pdinfo)); 20 if (nv < 0) { 21 perror("proc_pidinfo"); 22 goto fail; 23 } 24 printf("handle value = %p \n", (void *)pdinfo.pipeinfo.pipe_handle); 25 struct stat mystat; 26 fstat(pipe_fds[0], &mystat); 27 printf("ino value = %p \n", (void *)mystat.st_ino); 28 29 if ( (uintptr_t)mystat.st_ino == (uintptr_t)pdinfo.pipeinfo.pipe_handle) 30 goto success; 31 fail: 32 printf("[FAILED] fill_pipeinfo returned wrong values. (i.e. pipeinfo->pipe_handle != fstat->st_ino ) \n"); 33 return -1; 34 success: 35 printf("[PASSED] fill_pipeinfo returned correct values. (i.e. pipeinfo->pipe_handle == fstat->st_ino ) \n"); 36 return 0; 37} 38 39