An alternative way of populating /proc

From: Matt Aubury (Matt.Aubury@comlab.ox.ac.uk)
Date: Tue Apr 11 2000 - 10:24:19 EST


Hi,

The recent debate about the multitude of possible formats for data in
/proc caused me to think about a short-hand way of populating a /proc
directory hierarchy. This scheme uses a format string to describe the
hierarchical data layout, so:

        create_proc_entries(NULL,
                "test:{bar:{x:%d,y:%d,z:%d},foo:%f}",
                &x, &y, &z, foo_fun);

creates a "/proc/test" directory, which further contains a
subdirectory "bar" and a file "foo". The "bar" subdirectory contains
three files "x", "y" and "z".

The formatting argument "%d" takes a pointer to an integer. When
reading such a file (in this case "x", "y", or "z"), the value is
shown as ascii. Writing to the file (again in ascii) updates the
value. The "%f" formatting argument allows you to pass an arbitrary
user function for generating output. Clearly, there are potentially
quite a number of standard/useful formatting arguments.

I've done a quick, dirty, unfinished implementation of this idea, so
people can get the picture. Attached.

Many people will hate this because (1) it's doing parsing within the
kernel, (2) it tends to favour ascii I/O, (3) it tends to favour deep
directory hierarchies,(4) it uses recursion :-)

On the other hand, (1) it's very lightweight (lsmod shows size=744
including demo code), (2) it makes creating a lot of /proc entries
stupidly simple, (3) it might reduce code duplication.

Flame away!

Matt Aubury

--

begin 644 procbuild.c M+RH*("H@('!R:6YT9B@I+7-T>6QE("]P<F]C('1R964@8G5I9&QE<@H@*@H@ M*B`@*&,I($UA='1H97<@075B=7)Y(#(P,#`*("HO"@HC:6YC;'5D92`\;&EN M=7@O<')O8U]F<RYH/@HC:6YC;'5D92`\;&EN=7@O;6]D=6QE+F@^"@II;G0@ M8W)E871E7W!R;V-?96YT<FEE<RAS=')U8W0@<')O8U]D:7)?96YT<GD@*G!A M<F5N="P@8VAA<B`J9F]R;6%T+"`N+BXI.PIS=&%T:6,@:6YT('9C<F5A=&5? M<')O8U]E;G1R:65S*'-T<G5C="!P<F]C7V1I<E]E;G1R>2`J<&%R96YT+`H) M"0D)8VAA<B`J9F]R;6%T+"!V85]L:7-T("IA<F=S*3L*<W1A=&EC(')E861? M<')O8U]T(&EN=&5G97)?<F5A9%]P<F]C.PIS=&%T:6,@=W)I=&5?<')O8U]T M(&EN=&5G97)?=W)I=&5?<')O8SL*"B\J*BHJ*BHJ*B\*"B\J"B`J(%-O;64@ M9VQO8F%L('9A<FEA8FQE<R!W:&EC:"!C86X@8F4@<F5A9"!A;F0@=W)I='1E M;@H@*B\*:6YT('@@/2`U-2P@>2`](#8V+"!Z(#T@-S<["@HO*@H@*B!!(&5X M86UP;&4@=7-E<BUD969I;F5D('!R:6YT:6YG(&9U;F-T:6]N"B`J+PII;G0@ M9F]O7V9U;BAC:&%R("IB=68L(&-H87(@*BIS=&%R="P@;V9F7W0@;V9F<V5T M+`H)("`@(&EN="!L96YG=&@L(&EN="`J96]F+"!V;VED("ID871A*0I["@ER M971U<FX@*'-P<FEN=&8H8G5F+"`B=7-E<B!F=6YC=&EO;EQN:FEF9F5S/25L M9%QN(BP@:FEF9FEE<RDI.PI]"@HO*@H@*B!-;V1U;&4@:6YI=&EA;&ES871I M;VX*("HO"FEN="!I;FET7VUO9'5L92AV;VED*0I["@EI;G0@:3L*"@EI(#T@ M8W)E871E7W!R;V-?96YT<FEE<RA.54Q,+"`O*B!C<F5A=&4@:6X@<F]O="`O M<')O8R`J+PH)"0D)(G1E<W0Z>V)A<CI[>#HE9"QY.B5D+'HZ)61]+&9O;SHE M9GTB+`H)"0D))G@L("9Y+"`F>BP@9F]O7V9U;BD["@D*"7)E='5R;B`H:2`\ M(#`@/R`M14E/(#H@,"D["GT*"B\J"B`J($UO9'5L92!S:'5T(&1O=VX*("HO M"G9O:60@8VQE86YU<%]M;V1U;&4H=F]I9"D*>PH)<F5M;W9E7W!R;V-?96YT M<GDH(G1E<W0B+"!.54Q,*3L*?0H*+RHJ*BHJ*BHJ+PH*+RH*("H@0V]N=F5R M="!T;R!V87)A<F=S(&9O<FT@86YD(&-A;&P@8G5I;&1I;F<@9G5N8W1I;VX* M("HO"FEN="!C<F5A=&5?<')O8U]E;G1R:65S*'-T<G5C="!P<F]C7V1I<E]E M;G1R>2`J<&%R96YT+"!C:&%R("IF;W)M870L("XN+BD*>PH):6YT(&D["@EV M85]L:7-T(&%R9W,["@D*"79A7W-T87)T*&%R9W,L(&9O<FUA="D["@EI(#T@ M=F-R96%T95]P<F]C7V5N=')I97,H<&%R96YT+"!F;W)M870L("9A<F=S*3L* M"79A7V5N9"AA<F=S*3L*"0H)<F5T=7)N(&D["GT*"B\J*BHJ*BHJ*B\*(`IS M=&%T:6,@:6YT('9C<F5A=&5?<')O8U]E;G1R:65S*'-T<G5C="!P<F]C7V1I M<E]E;G1R>2`J<&%R96YT+`H)"0D)8VAA<B`J9F]R;6%T+"!V85]L:7-T("IA M<F=S7W!T<BD*>PH)<W1R=6-T('!R;V-?9&ER7V5N=')Y("IE;G1R>3L*"6EN M="!N+"!M.PH)"@DO*@H)("H@4&%R<V4@=&AE(&YA;64@;V8@=&AE(&5N=')Y M"@D@*B\*"6X@/2`P.PH)=VAI;&4@*&9O<FUA=%MN72`A/2`G.B<@)B8@9F]R M;6%T6VY=("$]("=<,"<I('L*"0EN*RL["@E]"@EI9B`H9F]R;6%T6VY=(#T] M("=<,"<I('L*"0ER971U<FX@+3$["@E]"@H)+RH*"2`J(%1E<FUI;F%T92!S M=')I;F<@*&EN+7!L86-E*0H)("HO"@EF;W)M871;;BLK72`]("=<,"<["B`* M"2\J"@D@*B!$971E<FUI;F4@='EP92!O9B!N;V1E"@D@*B\*"7-W:71C:"`H M9F]R;6%T6VY=*0H)>PH)8V%S92`G>R<Z"@D)+RH*"0D@*B!"=6EL9"!A(&1I M<F5C=&]R>0H)"2`J+PH)"65N=')Y(#T@8W)E871E7W!R;V-?96YT<GDH9F]R M;6%T+"!37TE&1$E2('P@4U])4E5'3RP@<&%R96YT*3L*"0H)"2\J"@D)("H@ M0G5I;&0@86YY('-U8BUE;G1R:65S('=I=&AI;B!T:&ES"@D)("HO"@D);BLK M.PH)"7=H:6QE("AF;W)M871;;ET@(3T@)WTG("8F(&9O<FUA=%MN72`A/2`G M7#`G*2!["@D)"6T@/2!V8W)E871E7W!R;V-?96YT<FEE<RAE;G1R>2P@9F]R M;6%T("L@;BP@87)G<U]P='(I.PH)"0EI9B`H;2`]/2`M,2D@>PH)"0D)<F5T M=7)N("TQ.PH)"0E]"@D)"6X@*ST@;3L*"0D):68@*&9O<FUA=%MN72`]/2`G M+"<I('L*"0D)"6XK*SL*"0D)?0H)"7T*"0EI9B`H9F]R;6%T6VY=(#T]("=< M,"<I('L*"0D)<F5T=7)N("TQ.PH)"7T*"0EB<F5A:SL*"@EC87-E("<E)SH* M"0DO*@H)"2`J($)U:6QD(&$@9FEL92!E;G1R>0H)"2`J+PH)"65N=')Y(#T@ M8W)E871E7W!R;V-?96YT<GDH9F]R;6%T+"!37TE&4D5'('P@4U])4E5'3RP@ M<&%R96YT*3L*"0D*"0DO*@H)"2`J($9I;&P@:6X@=&AE('-T<G5C='5R92!A M8V-O<F1I;F<@=&\@=&AE(&9O<FUA="!S=')I;F<*"0D@*B\*"0EN*RL["@D) M<W=I=&-H("AF;W)M871;;ETI('L*"0EC87-E("=D)SH*"0D)96YT<GDM/G)E M861?<')O8R`](&EN=&5G97)?<F5A9%]P<F]C.PH)"0EE;G1R>2T^=W)I=&5? M<')O8R`](&EN=&5G97)?=W)I=&5?<')O8SL*"0D)96YT<GDM/F1A=&$@/2!V M85]A<F<H*F%R9W-?<'1R+"!V;VED("HI.PH)"0EB<F5A:SL*"0D)"@D)8V%S M92`G9B<Z"@D)"65N=')Y+3YR96%D7W!R;V,@/2!V85]A<F<H*F%R9W-?<'1R M+"!R96%D7W!R;V-?="`J*3L*"0D)8G)E86L["@D)"0H)"61E9F%U;'0Z"@D) M"7)E='5R;B`M,3L*"0D)8G)E86L["@D)?0H)"6)R96%K.PH*"61E9F%U;'0Z M"@D)<F5T=7)N("TQ.PH)?0H)"@DO*@H)("H@4F5T=7)N(&YU;6)E<B!O9B!C M:&%R86-T97)S(&-O;G-U;65D"@D@*B\*"7)E='5R;B`H;B`K(#$I.PI]"@HO M*BHJ*BHJ*BHO"@HO*@H@*B!);G1E9V5R(')E861I;F<*("HO"FEN="!I;G1E M9V5R7W)E861?<')O8RAC:&%R("IB=68L(&-H87(@*BIS=&%R="P@;V9F7W0@ M;V9F<V5T+`H)"2`@("`@(&EN="!L96YG=&@L(&EN="`J96]F+"!V;VED("ID M871A*0I["@ER971U<FX@*'-P<FEN=&8H8G5F+"`B)61<;B(L("HH*&EN="`J M*61A=&$I*2D["GT*"B\J"B`J($EN=&5G97(@=W)I=&EN9PH@*B\*:6YT(&EN M=&5G97)?=W)I=&5?<')O8RAS=')U8W0@9FEL92`J9FEL92P@8V]N<W0@8VAA M<B`J8G5F9F5R+`H)"2`@("`@("!U;G-I9VYE9"!L;VYG(&-O=6YT+"!V;VED M("ID871A*0I["@EI;G0@*G9A;'5E.PH)=6YS:6=N960@;&]N9R!I.PH)"@EV M86QU92`]("AI;G0@*BED871A.PH)*G9A;'5E(#T@,#L*"0H)9F]R("AI(#T@ M,#L@:2`\(&-O=6YT("8F(&)U9F9E<EMI72`^/2`G,"<@)B8@8G5F9F5R6VE= M(#P]("<Y)SL@:2LK*2!["@D)*G9A;'5E(#T@*"IV86QU92`J(#$P*2`K("AB M=69F97);:5T@+2`G,"<I.PH)?0H@(`H)<F5T=7)N("AI("L@,2D["GT*"B\J )*BHJ*BHJ*B\* ` end

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sat Apr 15 2000 - 21:00:16 EST