source code for Unix "split" command 
Author Message
 source code for Unix "split" command

Hi,

Does anyone know where I can get a copy of the source code for the command
"split"?
The command splits a file into pieces.

Thanks for your help.
Becky



Fri, 19 Sep 2003 05:16:33 GMT  
 source code for Unix "split" command
Becky Poon a crit dans le message

Quote:
>Hi,

>Does anyone know where I can get a copy of the source code for the command
>"split"?
>The command splits a file into pieces.

[CLC]

Do a websearch (Linux, BSD). We don't provide working code. Why don't you
think a little, and design this function yourself? I don't have the specs,
but it seems that it can be done in standard C.

--
-hs-    "spaces, not tabs"
CLC-FAQ: http://www.eskimo.com/~scs/C-faq/top.html
ISO-C Library: http://www.dinkum.com/htm_cl
FAQ de FCLC : http://www.isty-info.uvsq.fr/~rumeau/fclc



Fri, 19 Sep 2003 06:08:34 GMT  
 source code for Unix "split" command

Quote:
>Becky Poon a crit dans le message

>>Hi,

>>Does anyone know where I can get a copy of the source code for the command
>>"split"?
>>The command splits a file into pieces.

>[CLC]

>Do a websearch (Linux, BSD). We don't provide working code. Why don't you
>think a little, and design this function yourself? I don't have the specs,
>but it seems that it can be done in standard C.

>--
>-hs-    "spaces, not tabs"
>CLC-FAQ: http://www.eskimo.com/~scs/C-faq/top.html
>ISO-C Library: http://www.dinkum.com/htm_cl
>FAQ de FCLC : http://www.isty-info.uvsq.fr/~rumeau/fclc

GNU fileutils probably. Or one of them thar GNU packages.

ftp.gnu.org

Rick Hohensee
www.clienux.com



Fri, 19 Sep 2003 09:12:35 GMT  
 source code for Unix "split" command

Quote:
> Hi,
> Does anyone know where I can get a copy of the source code for the command
> "split"?
> The command splits a file into pieces.

Since it dates from V6 UNIX, it should be in most any flavor which has
source code available, V6/V7/32V/*BSD, and even Linux, gnu, dos, or CP/M
archives.  For simplicity, check the Free/Net/OpenBSD source trees.
It is in the net1 source tree, too, in the DEC archives, I see.
There is even a version in the comp.sources.misc archives.
I would imagine a 25 line K&R C program with an open from standard
input and output to a named file, with extension incrementer tag,
and a loop to run an arbitrary number of lines or bytes would also do.
The BSD version is around 250 lines, though, with misc. features.
A google search should turn up the above leads.

Quote:
> Thanks for your help.
> Becky

Bob


Sat, 20 Sep 2003 01:08:55 GMT  
 source code for Unix "split" command

Quote:
> Hi,
> Does anyone know where I can get a copy of the source code for the command
> "split"?
> The command splits a file into pieces.

For you lucky souls that have access to a FreeBSD system with
sources installed split is located in "/usr/src/usr.bin/split" :
Quote:
> ll

total 13
-rw-r--r--  1 root  wheel    88 Feb  1  1999 Makefile
-rw-r--r--  1 root  wheel  3797 Aug 28  1999 split.1
-rw-r--r--  1 root  wheel  7629 Feb  5  1999 split.c

For all you others : here split.c comes in-band :-)
/*
 * Copyright (c) 1987, 1993, 1994
 *      The Regents of the University of California.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *      This product includes software developed by the University of
 *      California, Berkeley and its contributors.
 * 4. Neither the name of the University nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */

#ifndef lint
static const char copyright[] =

        The Regents of the University of California.  All rights reserved.\n";
#endif /* not lint */

#ifndef lint
#if 0

#endif
#endif /* not lint */

#include <sys/param.h>
#include <sys/types.h>

#include <ctype.h>
#include <err.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <regex.h>
#include <sysexits.h>

#define DEFLINE 1000                    /* Default num lines per file. */

long     bytecnt;                       /* Byte count to split on. */
long     numlines;                      /* Line count to split on. */
int      file_open;                     /* If a file open. */
int      ifd = -1, ofd = -1;            /* Input/output file descriptors. */
char     bfr[MAXBSIZE];                 /* I/O buffer. */
char     fname[MAXPATHLEN];             /* File name prefix. */
regex_t  rgx;
int      pflag;

void newfile __P((void));
void split1 __P((void));
void split2 __P((void));
static void usage __P((void));

int
main(argc, argv)
        int argc;
        char *argv[];
{
        int ch;
        char *ep, *p;

        while ((ch = getopt(argc, argv, "-0123456789b:l:p:")) != -1)
                switch (ch) {
                case '0': case '1': case '2': case '3': case '4':
                case '5': case '6': case '7': case '8': case '9':
                        /*
                         * Undocumented kludge: split was originally designed
                         * to take a number after a dash.
                         */
                        if (numlines == 0) {
                                p = argv[optind - 1];
                                if (p[0] == '-' && p[1] == ch && !p[2])
                                        numlines = strtol(++p, &ep, 10);
                                else
                                        numlines =
                                           strtol(argv[optind] + 1, &ep, 10);
                                if (numlines <= 0 || *ep)
                                        errx(EX_USAGE,
                                            "%s: illegal line count", optarg);
                        }
                        break;
                case '-':               /* Undocumented: historic stdin flag. */
                        if (ifd != -1)
                                usage();
                        ifd = 0;
                        break;
                case 'b':               /* Byte count. */
                        if ((bytecnt = strtol(optarg, &ep, 10)) <= 0 ||
                            (*ep != '\0' && *ep != 'k' && *ep != 'm'))
                                errx(EX_USAGE,
                                    "%s: illegal byte count", optarg);
                        if (*ep == 'k')
                                bytecnt *= 1024;
                        else if (*ep == 'm')
                                bytecnt *= 1048576;
                        break;
                case 'p' :      /* pattern matching. */
                        if (regcomp(&rgx, optarg, REG_EXTENDED|REG_NOSUB) != 0)
                                errx(EX_USAGE, "%s: illegal regexp", optarg);
                        pflag = 1;
                        break;
                case 'l':               /* Line count. */
                        if (numlines != 0)
                                usage();
                        if ((numlines = strtol(optarg, &ep, 10)) <= 0 || *ep)
                                errx(EX_USAGE,
                                    "%s: illegal line count", optarg);
                        break;
                default:
                        usage();
                }
        argv += optind;
        argc -= optind;

        if (*argv != NULL)
                if (ifd == -1) {                /* Input file. */
                        if ((ifd = open(*argv, O_RDONLY, 0)) < 0)
                                err(EX_NOINPUT, "%s", *argv);
                        ++argv;
                }
        if (*argv != NULL)                      /* File name prefix. */
                (void)strcpy(fname, *argv++);
        if (*argv != NULL)
                usage();

        if (pflag && (numlines != 0 || bytecnt != 0))
                usage();

        if (numlines == 0)
                numlines = DEFLINE;
        else if (bytecnt != 0)
                usage();

        if (ifd == -1)                          /* Stdin by default. */
                ifd = 0;

        if (bytecnt) {
                split1();
                exit (0);
        }
        split2();
        if (pflag)
                regfree(&rgx);
        exit(0);

Quote:
}

/*
 * split1 --
 *      Split the input by bytes.
 */
void
split1()
{
        long bcnt;
        int dist, len;
        char *C;

        for (bcnt = 0;;)
                switch ((len = read(ifd, bfr, MAXBSIZE))) {
                case 0:
                        exit(0);
                case -1:
                        err(EX_IOERR, "read");
                        /* NOTREACHED */
                default:
                        if (!file_open)
                                newfile();
                        if (bcnt + len >= bytecnt) {
                                dist = bytecnt - bcnt;
                                if (write(ofd, bfr, dist) != dist)
                                        err(EX_IOERR, "write");
                                len -= dist;
                                for (C = bfr + dist; len >= bytecnt;
                                    len -= bytecnt, C += bytecnt) {
                                        newfile();
                                        if (write(ofd,
                                            C, (int)bytecnt) != bytecnt)
                                                err(EX_IOERR, "write");
                                }
                                if (len != 0) {
                                        newfile();
                                        if (write(ofd, C, len) != len)
                                                err(EX_IOERR, "write");
                                } else
                                        file_open = 0;
                                bcnt = len;
                        } else {
                                bcnt += len;
                                if (write(ofd, bfr, len) != len)
                                        err(EX_IOERR, "write");
                        }
                }

Quote:
}

/*
 * split2 --
 *      Split the input by lines.
 */
void
split2()
{
        long lcnt = 0;
        FILE *infp;

        /* Stick a stream on top of input file descriptor */
        if ((infp = fdopen(ifd, "r")) == NULL)
                err(EX_NOINPUT, "fdopen");

        /* Process input one line at a time */
        while (fgets(bfr, sizeof(bfr), infp) != NULL) {
                const int len = strlen(bfr);

                /* If line is too long to deal with, just write it out */
                if (bfr[len - 1] != '\n')
                        goto writeit;

                /* Check if we need to start a new file */
                if (pflag) {
                        regmatch_t pmatch;

                        pmatch.rm_so = 0;
                        pmatch.rm_eo = len - 1;
                        if (regexec(&rgx, bfr, 0, &pmatch, REG_STARTEND) == 0)
                                newfile();
                } else if (lcnt++ == numlines) {
...

read more »



Sat, 20 Sep 2003 05:10:41 GMT  
 source code for Unix "split" command

Quote:

>> Hi,

>> Does anyone know where I can get a copy of the source code for the command
>> "split"?

>For all you others : here split.c comes in-band :-)

c.l.c is not comp.sources.wanteds.  If you're going to post sources,
make sure you only do it in places you don't mind being flamed.

--
Mark McIntyre
CLC FAQ <http://www.eskimo.com/~scs/C-faq/top.html>



Sat, 20 Sep 2003 06:34:25 GMT  
 source code for Unix "split" command

Quote:

>> Hi,

>> Does anyone know where I can get a copy of the source code for the command
>> "split"?
>> The command splits a file into pieces.

proabably this is what you want.
http://www.landfield.com/software/comp.sources.misc/packages/split.c/...

if your gonna spam.....



Sat, 20 Sep 2003 11:27:02 GMT  
 source code for Unix "split" command

Quote:


>>> Hi,

>>> Does anyone know where I can get a copy of the source code for the command
>>> "split"?

>>For all you others : here split.c comes in-band :-)
> c.l.c is not comp.sources.wanteds.  If you're going to post sources,
> make sure you only do it in places you don't mind being flamed.

Sorry. I'll post an URL next time.

Quote:
> --
> Mark McIntyre
> CLC FAQ <http://www.eskimo.com/~scs/C-faq/top.html>

--
Peter H?kanson        
        IPSec  Sverige      (At the Riverside of Gothenburg, home of Volvo)
           Sorry about my e-mail address, but i'm trying to keep spam out.
           Remove "icke-reklam"and "invalid"  and it works.


Sun, 21 Sep 2003 01:35:47 GMT  
 
 [ 8 post ] 

 Relevant Pages 

1. source for UNIX command "du"

2. Source code for unix "Cut" utility

3. Unix "file" command

4. How to access "comp.sources.unix"

5. C source code for "printf"

6. source code for "sh"

7. ISO OF "C" SOURCE CODE FORMATTER

8. source code in "Algorithms in C"

9. source code for "C beautifier"

10. "SE Using MFC" source code

11. Anything like "Split"?

12. WANTED: Unix 'who' command source code

 

 
Powered by phpBB® Forum Software