Ich lass mich überraschen,
aber ein FILE * fp wird in jedem Fall gebraucht, da ja stdio.h Funktionen über den File Pointer (handle) funktonieren (u.a. close(FILE * fp) )

popen() hat ja praktischerweise fast dieselbe Syntax wie fopen(), wie schon woanders angemerkt.