Linux-Development-Apps Digest #447, Volume #7     Fri, 1 Jun 01 12:13:12 EDT

Contents:
  Signals that are safe to ignore ("Bill Klein")
  Re: global variable in shared library? (Jan Atle Ramsli)
  grep help ("Rajesh Gupta")
  Re: How to discover File Descriptor leak? (Jan Atle Ramsli)
  Re: global variable in shared library? ("Wong Ka Chun")
  Re: grep help (Yury Petrov)
  Re: grep help (William Morris)
  Re: help with color and $PS1 (Guillaume)
  Re: grep help ("Nils O. Selåsdal")
  Re: ping works once and hangs (Mandie Smith)
  Linux: noteedit-1.11.0 (Zoom) (Joerg Anders)
  atoi question... (rick)
  gdb ("Babis Haldas")
  Re: atoi question... ("Zoran Cutura")
  Re: ping works once and hangs (David Konerding)
  Re: atoi question... (David Konerding)
  Re: global variable in shared library? (Bob Beaty)
  Re: grep help (Josef Moellers)
  Re: How to read FAT entry (Josef Moellers)
  Re: atoi question... (rick)
  Re: Signals that are safe to ignore (Erik Max Francis)

----------------------------------------------------------------------------

From: "Bill Klein" <[EMAIL PROTECTED]>
Subject: Signals that are safe to ignore
Date: Fri, 1 Jun 2001 10:23:58 +0100

Hi all,

Just wanted to know: which signals are safe to ignore? For example, I can ignore
SIGPIPE (and indeed have to in many cases), but if I ignore SIGSEGV, my program goes
into an infinite loop at code like:

char* test = NULL;
*test = 'a';

Which is of course even worse than the program crashing.

Many thanks.




------------------------------

Date: Fri, 01 Jun 2001 13:57:03 +0200
From: Jan Atle Ramsli <[EMAIL PROTECTED]>
Subject: Re: global variable in shared library?

Chris Cox wrote:
> 
> Perhaps what you want to do is make the variable a 'static' in your
> library.
> 
> Terminology gets awkward...hope this helps,
> Chris

Very often, you will build libraries like this:

static sometype somevar = SOMEINITVALUE;

somelib_open()
{
        somevar = SOMEREASONABLEVALUE;
        /* open files, comms and stuff */
}

somelib_foo()
{
#ifdef DEBUG
        if (somevar == SOMEINITVALE)
                somelib_print("Must call somelib_init() first");
#endif
        /* foo away */
}

somelib_close()
{
        /* close files, comms and stuff */
}

------------------------------

From: "Rajesh Gupta" <[EMAIL PROTECTED]>
Crossposted-To: comp.os.linux.help
Subject: grep help
Date: Fri, 1 Jun 2001 15:10:05 +0530

Hi,

 I have a very deep directory structure and finding it difficult to search a
symbol/text in a file. Is there a tool/script available which will search
all the files in all the directory ? I know one such tool is glimpse but
unfortunately that is not free.

Thanks

Rajesh Gupta



------------------------------

Date: Fri, 01 Jun 2001 14:04:00 +0200
From: Jan Atle Ramsli <[EMAIL PROTECTED]>
Subject: Re: How to discover File Descriptor leak?

[EMAIL PROTECTED] wrote:
> 
> Hello,
> 
> We have a system with multiple processes.  The system runs fine
> initially but soon runs out of File Descriptors. One of the process
> must have openned files/scokets without closing them.  How do you find
> out which one is leaking File Descriptors?
> 
> Thanks so much.
I have a general debugging trick that I find useful - it will give an
indication of CCF (Cyclomatic Complexity Factor) - not exact, but it
will track down the error that you are having.

When printing debug output as mentioned, print all debug with your own
functions, like this:

debug_print(char* function_name, char *message) // variables that you
find useful
{
#ifdef DEBUG // dont waste space unless you need it
        if (Debug < 2)
                return; // May control debugging from the command line
        tab(level);
        printf("In %s(): %s", function_name, message);
#endif

when you enter a function, call

debug_enter(char *function_name, char *parms)
{
        level++;
        // print func name and stuff
}

when you return from a function, call

debug_leave(char *function) // you can track function names with static
vars
{
        level--
}

Debug output will then be tabbed according to your 'level' - which
roughly corresponds to your CCF.

This has helped me write neater code, as well.


Atle

------------------------------

From: "Wong Ka Chun" <[EMAIL PROTECTED]>
Subject: Re: global variable in shared library?
Date: Fri, 1 Jun 2001 19:02:57 +0800

Hi,

  But it doesn't work if the shared library composed of mulitple C files.
One file declare buf as static can't be seen by the others..

- Wong

"Chris Cox" <[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED]...
: Perhaps what you want to do is make the variable a 'static' in your
: library.
:
: Terminology gets awkward...hope this helps,
: Chris
:
: Wong Ka Chun wrote:
: >
: > Hi,
: >
: >   How I can 'hide' a global variable in a shared library? Say, my
library
: > contain a variable "char buf[256]" but also my application contain a
global
: > variable with the same name "char buf[64]". When the program runs, I see
: > that buf in the shared library is replaced by buf in the application.
: >
: > - Wong



------------------------------

From: Yury Petrov <[EMAIL PROTECTED]>
Crossposted-To: comp.os.linux.help
Subject: Re: grep help
Date: Fri, 01 Jun 2001 11:18:10 GMT

Try 'find' with '-exec grep <your reg exp> {} \;' as one of find's actions



Rajesh Gupta wrote:

> Hi,
>
>  I have a very deep directory structure and finding it difficult to search a
> symbol/text in a file. Is there a tool/script available which will search
> all the files in all the directory ? I know one such tool is glimpse but
> unfortunately that is not free.
>
> Thanks
>
> Rajesh Gupta

--
YP



------------------------------

From: William Morris <[EMAIL PROTECTED]>
Crossposted-To: comp.os.linux.help
Subject: Re: grep help
Date: Fri, 01 Jun 2001 11:23:50 GMT

Rajesh Gupta <[EMAIL PROTECTED]> wrote:
>  I have a very deep directory structure and finding it difficult to search a
> symbol/text in a file. Is there a tool/script available which will search
> all the files in all the directory ? I know one such tool is glimpse but
> unfortunately that is not free.

Rajesh 

You might use "find", for example:

        find . -name "*.c" | xargs grep text

Regards
-- 
William Morris
[EMAIL PROTECTED]


------------------------------

Crossposted-To: alt.linux,aus.computers.linux,comp.os.linux.setup
From: Guillaume <[EMAIL PROTECTED]>
Subject: Re: help with color and $PS1
Date: Fri, 1 Jun 2001 08:59:57 -0400

On Fri, 1 Jun 2001, David. E. Goble wrote:
> I tried;
>
> PS1="\n\[\033[1;35m\]IBM 686/pr120+ Linux RedHat 6.2
> \[\033[0;36m\]\$(date)\n\[\u@\h \W]\\$ \[\033[0;37m\]"

Did you tried :

PS1="\n\[\033[1;35m\]IBM 686/pr120+ Linux RedHat 6.2
\[\033[0;36m\]\$(date)\n\[\u@\h \W]\\$ \[\033[0m\]"

G.


------------------------------

From: "Nils O. Selåsdal" <[EMAIL PROTECTED]>
Crossposted-To: comp.os.linux.help
Subject: Re: grep help
Date: Fri, 1 Jun 2001 13:30:59 +0200


"Rajesh Gupta" <[EMAIL PROTECTED]> wrote in message
news:9f7npi$hue$[EMAIL PROTECTED]...
> Hi,
>
>  I have a very deep directory structure and finding it difficult to
search a
> symbol/text in a file. Is there a tool/script available which will
search
> all the files in all the directory ? I know one such tool is glimpse
but
> unfortunately that is not free.
grep -r tst * will search for tst in all the files in all the subdirs
of the current directory.




------------------------------

From: [EMAIL PROTECTED] (Mandie Smith)
Subject: Re: ping works once and hangs
Date: 1 Jun 2001 06:29:02 -0700

Nate Eldredge <[EMAIL PROTECTED]> wrote in message 
news:<[EMAIL PROTECTED]>...
> True.  So it looks to me like your version of ping is broken.
> (Unless: the only other thing I can think of is that the -i option is
> somehow being used with a large argument.  You don't have it set up as
> an alias, do you?)
> 
> You could strace it and find out just what it thinks it's doing.
> (You'll need to be root.)

Well it looks like ping is fine.  I copied ping across from another system
with the same distribution that worked fine.  Still does the same thing on 
this system.  I did an strace on ping and it didn't really tell me much,
here's what it said:
# strace -c -v ping -n -c 5 -i 1 localhost
execve("/bin/ping", ["ping", "-n", "-c", "5", "-i", "1", "localhost"], [/* 46 vars 
*/]) = 0
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=255 time=0.285 ms
% time     seconds  usecs/call     calls    errors syscall
====== =========== =========== ========= ========= ================
 31.24    0.000278          70         4           write
 13.60    0.000121          11        11           read
  9.55    0.000085          85         1           connect
  8.65    0.000077          77         1           sendto
  7.64    0.000068           7        10         1 open
  6.74    0.000060           4        14           old_mmap
  3.37    0.000030           4         7           munmap
  3.03    0.000027          14         2           socket
  2.92    0.000026           3        10           close
  1.80    0.000016           3         6           fstat64
  1.46    0.000013           3         5           brk
  1.24    0.000011           3         4           fstat
  1.01    0.000009           5         2           mprotect
  0.90    0.000008           4         2           recvfrom
  0.79    0.000007           7         1           ioctl
  0.79    0.000007           2         4           fcntl
  0.79    0.000007           2         3           rt_sigaction
  0.79    0.000007           4         2           setsockopt
  0.67    0.000006           2         3           getpid
  0.67    0.000006           2         4           gettimeofday
  0.67    0.000006           2         4           rt_sigprocmask
  0.45    0.000004           4         1           alarm
  0.34    0.000003           2         2           getuid
  0.34    0.000003           3         1           setresuid
  0.34    0.000003           3         1           getsockopt
  0.22    0.000002           2         1           setuid
====== =========== =========== ========= ========= ================
100.00    0.000890                   106         1 total

The only difference I can tell between these two machines is that the one
with the broken ping is getting a lot of collisions when you use ping.
I'm guessing that this probably is the problem.

thanks for all your help
Mandie

------------------------------

From: [EMAIL PROTECTED] (Joerg Anders)
Subject: Linux: noteedit-1.11.0 (Zoom)
Date: 1 Jun 2001 13:43:12 GMT

Version 1.11.0 of "noteedit" available.

See: http://rnvs.informatik.tu-chemnitz.de/~jan/noteedit/noteedit.html

New feature: Zoom

Note! There is a slight version incompatibility because the meaning
of the overlength, underlength and lyricsdist parameters has changed.
Please edit the ".not" files and multiply the distance values with 3.
Or load every ".not" file and correct the values using the staff
properties dialog. 

other features:

   * export LilyPond;
   * insertion/deletion/modification of notes, rests, dotted notes/rests,
     tied notes, slured notes, clefs with/without shift, time signatures,
     key signatures, volume signatures, tempo signatures, triplets, repeat
     groups with/without special ending and instrument changes on different
     staffs;
   * stem up/down
   * building chords;
   * building groups of beamed notes;
   * Undo/Redo
   * playing on /dev/sequencer (if correctly configured) whereby:
        o giving each staff a different voice;
        o giving each staff a different channel;
        o giving each staff a different reverbation and chorus;
        o highlighting the played notes;
        o muting staffs;
   * lyrics
   * export MusiXTeX;
   * export PMX;
   * export MIDI;
   * import MIDI;
   * read from MIDI keyboard;
   * Application of MIDI event filters to eliminate
     some dirty effects (especially on human played MIDI files);
   * record from MIDI keyboard;
   * saving an restoring the files. The fileformat is similarily to the
     format of the music publication program (MUP). So you if you are a MUP
     user you have the possibility to convert the files into MIDI and
     Postscript. But this is no longer necessary because noteedit can export
     MusiXTeX, PMX, MIDI and LilyPond.


-- 
J.Anders, Chemnitz, GERMANY ([EMAIL PROTECTED])

------------------------------

Date: Sat, 02 Jun 2001 00:16:17 +1000
From: rick <[EMAIL PROTECTED]>
Reply-To: [EMAIL PROTECTED]
Subject: atoi question...

Hi, all,
    I am new to C programming. Now I am writing a program to retrieve a
data from a file. After I retrieve that data, I can read the value is
"3000\n". And I want to use this data to be my listening port for a
server. So I wrote the program like:
char * pt;
// I can read pt = "3000\n" in GDB.

sin.sin_port=atoi(pt);

but, after this line the pt become "". and sin.sin_port=0, Why won't its
value be 3000?
Is there anything wrong with my program?
And I also wrote a small program to test atoi function. I declared char
* pt = "3000\n"
and then declared int i=0; then
i=atoi(pt);
the i becomes 3000. It works fine. Can anyone tell me what's the
difference between these two situation? Why can't I get the result in
the first situation?

Thanks in advance.
Rick


------------------------------

From: "Babis Haldas" <[EMAIL PROTECTED]>
Subject: gdb
Date: Fri, 1 Jun 2001 17:53:44 +0300

Hi

Is there any way to debug threads using gdb ?
When run inside debuger program ends after the first thread terminate

Using gdb 5 , SuSe 7.1 , kernel 2.2.18

Thanks





------------------------------

From: "Zoran Cutura" <[EMAIL PROTECTED]>
Subject: Re: atoi question...
Date: Fri, 01 Jun 2001 17:00:28 +0200
Reply-To: [EMAIL PROTECTED]

Once upon a while "rick" <[EMAIL PROTECTED]> wrote:

> Hi, all,
>     I am new to C programming. Now I am writing a program to
>     retrieve a
> data from a file. After I retrieve that data, I can read the
> value is "3000\n". And I want to use this data to be my
> listening port for a server. So I wrote the program like: char
> * pt;
> // I can read pt = "3000\n" in GDB.
> 
> sin.sin_port=atoi(pt);
> 
> but, after this line the pt become "". and sin.sin_port=0, Why
> won't its value be 3000?
> Is there anything wrong with my program? And I also wrote a
> small program to test atoi function. I declared char * pt =
> "3000\n"
> and then declared int i=0; then
> i=atoi(pt);
> the i becomes 3000. It works fine. Can anyone tell me what's
> the difference between these two situation? Why can't I get the
> result in the first situation?
> 
You may need to use the htonl/htons functions to bring
your bytes into network order. Different hosts use different
bytes orders (endianess).


-- 
Z ([EMAIL PROTECTED])
"LISP  is worth learning for  the profound enlightenment  experience
you will have when you finally get it; that experience will make you
a better programmer for the rest of your days."   -- Eric S. Raymond

------------------------------

From: [EMAIL PROTECTED] (David Konerding)
Subject: Re: ping works once and hangs
Date: 1 Jun 2001 14:43:26 GMT
Reply-To: [EMAIL PROTECTED]

On 1 Jun 2001 06:29:02 -0700, Mandie Smith <[EMAIL PROTECTED]> wrote:
> Nate Eldredge <[EMAIL PROTECTED]> wrote in message 
>news:<[EMAIL PROTECTED]>...
>> True.  So it looks to me like your version of ping is broken.
>> (Unless: the only other thing I can think of is that the -i option is
>> somehow being used with a large argument.  You don't have it set up as
>> an alias, do you?)
>> 
>> You could strace it and find out just what it thinks it's doing.
>> (You'll need to be root.)
> 
> Well it looks like ping is fine.  I copied ping across from another system
> with the same distribution that worked fine.  Still does the same thing on 
> this system.  I did an strace on ping and it didn't really tell me much,
> here's what it said:
> # strace -c -v ping -n -c 5 -i 1 localhost
> execve("/bin/ping", ["ping", "-n", "-c", "5", "-i", "1", "localhost"], [/* 46 vars 
>*/]) = 0
> PING localhost (127.0.0.1): 56 data bytes
> 64 bytes from 127.0.0.1: icmp_seq=0 ttl=255 time=0.285 ms

Don't use "strace -c", use "strace".  We want to see where it's blocking,
not what calls it makes.

> The only difference I can tell between these two machines is that the one
> with the broken ping is getting a lot of collisions when you use ping.
> I'm guessing that this probably is the problem.

Yes.  Except, since ou said in your original post, the ping was done to localhost,
and you don't see collisions on localhost since it is not a physical medium.  If
you do see collisions on localhost, something is very, very wrong.

Dave

------------------------------

From: [EMAIL PROTECTED] (David Konerding)
Subject: Re: atoi question...
Date: 1 Jun 2001 15:06:01 GMT
Reply-To: [EMAIL PROTECTED]

On Sat, 02 Jun 2001 00:16:17 +1000, rick <[EMAIL PROTECTED]> wrote:
> Hi, all,
>     I am new to C programming. Now I am writing a program to retrieve a
> data from a file. After I retrieve that data, I can read the value is
> "3000\n". And I want to use this data to be my listening port for a
> server. So I wrote the program like:
> char * pt;
> // I can read pt = "3000\n" in GDB.
> 
> sin.sin_port=atoi(pt);
> 
> but, after this line the pt become "". and sin.sin_port=0, Why won't its
> value be 3000?

Um, almost certainly because you made pt a pointer to char and then
didn't allocate any memory to store the string.  "3000" followed by
a 0 needs 5 bytes of storage.  You didn't tell us how you read
the data in, but I'm guessing you just placed the data in the memory
pointed to by the pt pointer, rather than allocating space, storing
the string there, and then making pt point to the start of allocated
space.  If you're lazy you could do "char pt[256]" and hope that
you don't have a file with more than 255 characters (or specifically
only read in up to 255 characters).  I'm not sure why you want to have
the '\n' in the string, that would probably be ignored by atoi.

See the man page for atoi on why atoi has "issues" (no way of detecting an error).


> Is there anything wrong with my program?
> And I also wrote a small program to test atoi function. I declared char
> * pt = "3000\n"
> and then declared int i=0; then
> i=atoi(pt);
> the i becomes 3000. It works fine. Can anyone tell me what's the

Here, the compiler allocates the space to store the string and automatically
makes pt point to it.

Dave

------------------------------

From: [EMAIL PROTECTED] (Bob Beaty)
Subject: Re: global variable in shared library?
Reply-To: [EMAIL PROTECTED]
Date: Fri, 01 Jun 2001 14:55:53 GMT

"Wong Ka Chun" wrote:
>   How I can 'hide' a global variable in a shared library? Say, my 
library
> contain a variable "char buf[256]" but also my application contain a 
global
> variable with the same name "char buf[64]". When the program runs, I 
see
> that buf in the shared library is replaced by buf in the application.

The only way to do this is to pick a name that is not likely to be 
repeated. There's nothing else that can possibly work - if it's true that 
you want to have two global variables (one in the library and one in the 
program).

Look at it this way... 'static' isn't going to help because the user of 
the library may wish to have a static variable of the same name. BINGO! 
problem.

You might want to try *not* to have global variables - but if you've gone 
down that path and are convinced that you must have them, then you need 
to work very hard at naming the variable something that is not very 
likely to get repeated.

For example, what I often use is simple namespace prefixing... If I have 
a library I usually name it because it stands alone as a project. Say my 
library was GTK or GLib or PointLib or whatever... then simply make sure 
that you document that your library uses 'gtk' or 'glib' or 'plib' as the 
prefix to all functions, classes, variables, etc. Then you've told the 
user of your library that he mustn't use any names starting like that and 
you're safe.

So, the only way to *ensure* that you have no problems is to use a 
careful naming scheme.

                        Thanks,
                          Bob   ([EMAIL PROTECTED]) 
                        The Man from S.P.U.D. 
                        We will write no code before it's designed.  


------------------------------

From: Josef Moellers <[EMAIL PROTECTED]>
Crossposted-To: comp.os.linux.help
Subject: Re: grep help
Date: Fri, 01 Jun 2001 17:10:04 +0200

Yury Petrov wrote:
> =

> Try 'find' with '-exec grep <your reg exp> {} \;' as one of find's acti=
ons

Append "-print" after the \; to get the name of the file which matched.
-- =

Josef M=F6llers (Pinguinpfleger bei FSC)
        If failure had no penalty success would not be a prize
                                                -- T.  Pratchett

------------------------------

From: Josef Moellers <[EMAIL PROTECTED]>
Subject: Re: How to read FAT entry
Date: Fri, 01 Jun 2001 17:08:53 +0200

Frank wrote:
> =

> Hi All,
> =

> I was just wondering.  What am I doing wrong when reading this FAT entr=
y
> from a floppy disk?  Shouldn't it read 512?

>         lseek(fdFloppy, 0, SEEK_SET);
> =

>         read(fdFloppy, szBuffer, 512);

You're not reading a FAT entry, you'reading the Master Boot Record.
The (first) FAT is to be found at offset 512 (second block on the
floppy).

More correct: Read the very first block (the MBR), then extract the WORD
at offset 0x0e. This will tell you how many sectors to skip from the
beginning of the floppy to the start of the (first) FAT.
The byte at offset 0x10 will tell you how many copies of the FAT there
are while the WORD at offset 0x16 will tell you how many sectors each
FAT is.
You'll then need some magic to determine whether it's a FAT12 or a
FAT16, although on a floppy it'll usually be a FAT12 and on a hard disk
it'll be a FAT16.

Josef, who has just written a DOS program to create a FAT filesystem.
-- =

Josef M=F6llers (Pinguinpfleger bei FSC)
        If failure had no penalty success would not be a prize
                                                -- T.  Pratchett

------------------------------

Date: Sat, 02 Jun 2001 01:43:44 +1000
From: rick <[EMAIL PROTECTED]>
Reply-To: [EMAIL PROTECTED]
Subject: Re: atoi question...

Thanks for your answer. I have a file which there is one line like : 
"port 3000", so basically when I use strtok function to retrieve data it 
will look like "3000\n". Basically I use fgets to get the data and then 
use strtok to store the data and use a pointer to point to the data. 
Now, my another question is how can I store a string which i use pointer 
to point to the value and then store it into an character array, like:
char a[200];
a=pt;
this is not right, right? But I don't really know how to do just as you 
said i use an array to store the data. Especially, fgets function return 
( char *), I cannot use an array to store that data. What should I do?


> 
> Um, almost certainly because you made pt a pointer to char and then
> didn't allocate any memory to store the string.  "3000" followed by
> a 0 needs 5 bytes of storage.  You didn't tell us how you read
> the data in, but I'm guessing you just placed the data in the memory
> pointed to by the pt pointer, rather than allocating space, storing
> the string there, and then making pt point to the start of allocated
> space.  If you're lazy you could do "char pt[256]" and hope that
> you don't have a file with more than 255 characters (or specifically
> only read in up to 255 characters).  I'm not sure why you want to have
> the '\n' in the string, that would probably be ignored by atoi.
> 
> See the man page for atoi on why atoi has "issues" (no way of detecting an error).
> 
> 
> 
>> Is there anything wrong with my program?
>> And I also wrote a small program to test atoi function. I declared char
>> * pt = "3000\n"
>> and then declared int i=0; then
>> i=atoi(pt);
>> the i becomes 3000. It works fine. Can anyone tell me what's the
> 
> 
> Here, the compiler allocates the space to store the string and automatically
> makes pt point to it.
> 
> Dave
By the way, I rewrite my program like following:

*pt = "                    ";
and then I set pt=somefuntion(); // this somefunction() will return "3000\n"
sin.sin_port=htons(atoi(pt));

but the value is still 0. I don't really understand what's going on with it.
Thanks for your help.


------------------------------

From: Erik Max Francis <[EMAIL PROTECTED]>
Subject: Re: Signals that are safe to ignore
Date: Fri, 01 Jun 2001 08:45:22 -0700

Bill Klein wrote:

> Just wanted to know: which signals are safe to ignore? For example, I
> can ignore
> SIGPIPE (and indeed have to in many cases), but if I ignore SIGSEGV,
> my program goes
> into an infinite loop at code like:

You can't ignore SIGSEGV.

-- 
 Erik Max Francis / [EMAIL PROTECTED] / http://www.alcyone.com/max/
 __ San Jose, CA, US / 37 20 N 121 53 W / ICQ16063900 / &tSftDotIotE
/  \ No one knows what he can do until he tries.
\__/ Publilius Syrus
    blackgirl international / http://www.blackgirl.org/
 The Internet resource for black women.

------------------------------


** FOR YOUR REFERENCE **

The service address, to which questions about the list itself and requests
to be added to or deleted from it should be directed, is:

    Internet: [EMAIL PROTECTED]

You can send mail to the entire list by posting to the
comp.os.linux.development.apps newsgroup.

Linux may be obtained via one of these FTP sites:
    ftp.funet.fi                                pub/Linux
    tsx-11.mit.edu                              pub/linux
    sunsite.unc.edu                             pub/Linux

End of Linux-Development-Apps Digest
******************************

Reply via email to