Eric Schrock wrote:
On Sat, Aug 25, 2007 at 10:45:10AM +0800, zhijun wrote:
I really appreciate your kindness to explain this for me.
::array ... p | ::eval '<p/Kn | =Kn' gives pure uintptr_t's so it works
well with mdb pipeline. What I am suprized is that ::array ... p | /Kn
*doesn't* give pure uintptr_t's, as its output has an address in the first
line, so I expect it will break the mdb pipeline, but instead it works. Am
I missing anything here?
As mentioned in the original mail, dcmds have a way of 'knowing' when
they are in pipe context (DCMD_PIPE_OUT) and can alter their output
based on this. For the '/' operator, you can find this check in
print_arglist():
if (DCMD_HDRSPEC(flags) && (flags & DCMD_PIPE_OUT) == 0) {
Hi Eric,
Yes, after trying some dtrace scripts I now understand what you really
mean here.
Are you just curious, or are you trying to solve a particular problem?
Mainly as I am curious, as I didn't even know about the different
behaviour of dcmds with pipeline.
As Jonathan mentioned, there are more efficient ways to accomplish what
you have demonstrated thus far.
Yes, ::map is a good way to go. Thanks for the help all the way.
BTW: I really wish the document for mdb ( or somewhere else) could
include some examples for dcmds and walkers, it would make our lives
easier than simply doing ::help eval and ::help map and wondering what
are these dcmds for :-)
Best regards,
and have a good day