writeq(Term) is equivalent to printf("%DIMQvw", Term) or write_term(Term, [attributes(full),quoted(true),numbervars(true), variables(raw),depth(full),transform(false)]).
Note that as usual, the output is buffered, so it may need to be flushed either by closing the stream, by writing again or by using flush/1.
Note also that although it is possible to print suspensions and external handles, these are printed in their printed representation as Prolog terms with functors such as 'BAG' (for bag objects). They will be read back in as such Prolog terms, rather than as their original type.
Success:
?- writeq(output, "string"),nl(output),
writeq(output, head:-body).
"string"
head :- body
yes.
?- writeq(*(^(1,2),+(3,4))).
1 ^ 2 * (3 + 4)
yes.
Error:
writeq(S, a(b,c)). (Error 4).
writeq("string", a(b,c)). (Error 5).
writeq(9, X + 2). (Error 192).
writeq(atom, X + 2). (Error 193).