View Single Post

  #2 (permalink)  
Old 10-30-2007, 07:17 AM
nixcraft's Avatar
nixcraft nixcraft is offline
Never say die
User
 
Join Date: Jan 2005
Location: BIOS
My distro: Any distro with shell
Posts: 910
Rep Power: 10
nixcraft has a reputation beyond repute nixcraft has a reputation beyond repute nixcraft has a reputation beyond repute nixcraft has a reputation beyond repute nixcraft has a reputation beyond repute nixcraft has a reputation beyond repute nixcraft has a reputation beyond repute nixcraft has a reputation beyond repute nixcraft has a reputation beyond repute nixcraft has a reputation beyond repute nixcraft has a reputation beyond repute
Default

Noop, it is not available on Linux. It was SCO / Solaris / HP-UX UNIX command.

Edit: I found something @ SF.net ~ The Heirloom Project provides standard Unix utilities including what command. Download and compile the same https://sourceforge.net/projects/heirloom

Here is the source code for what.c:
Code:
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (the "License").
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/* Copyright (c) 1988 AT&T */
/* All Rights Reserved */
/*
 * Copyright 2002 Sun Microsystems, Inc. All rights reserved.
 * Use is subject to license terms.
 */
/*
 * from what.c 1.11 06/12/12
 */

/*    from OpenSolaris "what.c"    */

/*
 * Portions Copyright (c) 2006 Gunnar Ritter, Freiburg i. Br., Germany
 *
 * Sccsid @(#)what.c    1.12 (gritter) 4/14/07
 */
/*    from OpenSolaris "sccs:cmd/what.c"    */

#if __GNUC__ >= 3 && __GNUC_MINOR__ >= 4 || __GNUC__ >= 4
#define    USED    __attribute__ ((used))
#elif defined __GNUC__
#define    USED    __attribute__ ((unused))
#else
#define    USED
#endif
static const char sccsid[] USED = "@(#)what.sl    1.12 (gritter) 4/14/07";

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#define MINUS '-'
#define MINUS_S "-s"
#undef    TRUE
#define TRUE  1
#undef    FALSE
#define FALSE 0


static int found = FALSE;
static int silent = FALSE;

static char    pattern[]  =  "@(#)";

static void    dowhat(FILE *);
static int    trypat(FILE *,char *);


int 
main(int argc, register char **argv)
{
    register int i;
    register FILE *iop;
    int current_optind, c;

    if (argc < 2)
        dowhat(stdin);
    else {

        current_optind = 1;
        optind = 1;
        opterr = 0;
        i = 1;
        /*CONSTCOND*/
        while (1) {
            if(current_optind < optind) {
               current_optind = optind;
               argv[i] = 0;
               if (optind > i+1 ) {
                  argv[i+1] = NULL;
               }
            }
            i = current_optind;
                c = getopt(argc, argv, "-s");

                /* this takes care of options given after
                ** file names.
                */
            if((c == EOF)) {
               if (optind < argc) {
                /* if it's due to -- then break; */
                   if(argv[i][0] == '-' &&
                      argv[i][1] == '-') {
                      argv[i] = 0;
                      break;
                   }
                   optind++;
                   current_optind = optind;
                   continue;
               } else {
                   break;
               }
            }
            switch (c) {
            case 's' :
                silent = TRUE;
                break;
            default  :
                fprintf(stderr,
                    "Usage: what [ -s ] filename...\n");
                exit(2);
            }
        }
        for(i=1;(i<argc );i++) {
            if(!argv[i]) {
               continue;
            }
            if ((iop = fopen(argv[i],"r")) == NULL)
                fprintf(stderr,"can't open %s (26)\n",
                    argv[i]);
            else {
                printf("%s:\n",argv[i]);
                dowhat(iop);
            }
        }
    }
    return (!found);                /* shell return code */
}


static void
dowhat(register FILE *iop)
{
    register int c;

    while ((c = getc(iop)) != EOF) {
        if (c == pattern[0])
            if(trypat(iop, &pattern[1]) && silent) break;
    }
    fclose(iop);
}


static int
trypat(register FILE *iop,register char *pat)
{
    register int c = 0;

    for (; *pat; pat++)
        if ((c = getc(iop)) != *pat)
            break;
    if (!*pat) {
        found = TRUE;
        putchar('\t');
        while ((c = getc(iop)) != EOF && c &&
                !strchr("\"\\>\n", c&0377))
            putchar(c);
        putchar('\n');
        if(silent)
            return(TRUE);
    }
    else if (c != EOF)
        ungetc(c, iop);
    return(FALSE);
}
__________________
Vivek | My personal blog
Linux Evangelist
Play hard stay cool
Reply With Quote