⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lscdlib.c

📁 Vxworks的培训教程,大家分享下啊,
💻 C
字号:
/* lscdLib.c - ls(), ll(), cd(), and pwd() from usrLib.c */#include "vxWorks.h"#include "fioLib.h"#include "dirent.h"#include "stat.h"#include "private/funcBindP.h"#include "string.h"#include "stdio.h"#include "pathLib.h"#include "time.h"#include "ioLib.h"#include "netDrv.h"#include "errno.h"#define MAX_DATE_STRING 21/********************************************************************************* ls - list the contents of a directory** This command is similar to UNIX ls.  It lists the contents of a directory* in one of two formats.  If <doLong> is FALSE, only the names of the files* (or subdirectories) in the specified directory are displayed.  If <doLong>* is TRUE, then the file name, size, date, and time are displayed.  For * a long listing, any entries that describe subdirectories are also flagged* with the label "DIR".** The <dirName> parameter specifies which directory to list.  If* <dirName> is omitted or NULL, the current working directory is listed.** Empty directory entries and dosFs volume label entries are not reported.** NOTE: When used with netDrv devices (FTP or RSH), <doLong> has no effect.** RETURNS: OK or ERROR.** SEE ALSO: ll(), lsOld(), stat(),* .pG "Target Shell"*/STATUS ls    (    FAST char	*dirName,	/* name of dir to list */    BOOL	doLong 		/* if TRUE, do long listing */    )    {    FAST STATUS		status;		/* return status */    FAST DIR		*pDir;		/* ptr to directory descriptor */    FAST struct dirent	*pDirEnt;	/* ptr to dirent */    struct stat		fileStat;	/* file status info    (long listing) */    STATUS		statResult;     /* return value of stat () call */    char		*pDirComment;	/* dir comment         (long listing) */    BOOL		firstFile;	/* first file flag     (long listing) */    struct tm 	        fileDate;       /* file date in time.h format */    char		dateString [MAX_DATE_STRING];    char 		fileName [MAX_FILENAME_LENGTH];					/* buffer for building file name */    if (dirName == NULL)	dirName = ".";    /* try to do a netDrv listing first */     if (_func_netLsByName != NULL)	{	if ((*_func_netLsByName) (dirName) == OK)	    return (OK);	else if (errno != S_netDrv_UNKNOWN_REQUEST)	    return (ERROR);	}	        if ((pDir = opendir (dirName)) == NULL)        {	printf ("Can't open \"%s\".\n", dirName);	return (ERROR);        }    status = OK;    firstFile = TRUE;    while (TRUE)	{	errno = OK;	pDirComment = "";    	pDirEnt = readdir (pDir);	if (pDirEnt == NULL)	    {	    if (errno != OK)		{		printf ("error reading entry (errno=%#x)\n", errno);		status = ERROR;		}	    break;	    }	if (!doLong)	    printf ("%s\n", pDirEnt->d_name);	else	    {	    if (firstFile)		{		printf ("  size          date       time       name\n");		printf ("--------       ------     ------    --------\n");		firstFile = FALSE;		}	    /* Construct path/filename for stat */	    (void) pathCat (dirName, pDirEnt->d_name, fileName);	    /* Get and print file status info */	    if ((statResult = (stat (fileName, &fileStat))) != OK)		{		/* 		 * Since we got this file from a readdir call, we know		 * something is there.  A failed stat() is probably		 * a symlink that can't be resolved.  Continue with the		 * listing.		 */		memset (&fileStat, 0, sizeof (fileStat));		perror ("IO Error - can\'t stat file");		pDirComment = "<IO Error>";		}	    else if (S_ISDIR (fileStat.st_mode))	        pDirComment = "<DIR>";	    /* zero out the fileDate struct */	    	    memset (&fileDate, 0, sizeof (fileDate));	    /* use the results of the stat() call to fill in the fileDate */	    	    localtime_r (&fileStat.st_mtime, &fileDate);	    if (statResult == OK)	        strftime (dateString, MAX_DATE_STRING, "%b-%d-%Y  %H:%M:%S",			  &fileDate);	    else		{	        memset (dateString, ' ', MAX_DATE_STRING);		dateString [MAX_DATE_STRING] = EOS;		}	    printf ("%8d    %s   %-16s  %s\n",		    fileStat.st_size,		    dateString,		    pDirEnt->d_name, pDirComment);	    }	}    status |= closedir (pDir);    return (status);    }/********************************************************************************* ll - do a long listing of directory contents** This command causes a long listing of a directory's contents to be* displayed.  It is equivalent to:* .CS*     -> ls dirName, TRUE* .CE** NOTE: When used with netDrv devices (FTP or RSH), ll() does not give* directory information.  It is equivalent to an ls() call with no * long-listing option.** RETURNS: OK or ERROR.** SEE ALSO: ls(), stat(),* .pG "Target Shell"*/STATUS ll    (    char *dirName		/* name of directory to list */    )    {    return (ls (dirName, TRUE));    }/********************************************************************************* cd - change the default directory** This command sets the default directory to <name>.  The default directory* is a device name, optionally followed by a directory local to that* device.** To change to a different directory, specify one of the following:* .iP "" 4* an entire path name with a device name, possibly followed by a directory* name.  The entire path name will be changed.* .iP* a directory name starting with a `~' or `/' or `$'.  The directory part* of the path, immediately after the device name, will be replaced with the new* directory name.* .iP* a directory name to be appended to the current default directory.* The directory name will be appended to the current default directory.* .LP** An instance of ".." indicates one level up in the directory tree.** Note that when accessing a remote file system via RSH or FTP, the* VxWorks network device must already have been created using* netDevCreate().** WARNING* The cd() command does very little checking that <name> represents a valid* path.  If the path is invalid, cd() may return OK, but subsequent* calls that depend on the default path will fail.* * EXAMPLES* The following example changes the directory to device `/fd0/':* .CS*     -> cd "/fd0/"* .CE* This example changes the directory to device `wrs:' with the local* directory `~leslie/target':* .CS*     -> cd "wrs:~leslie/target"* .CE* After the previous command, the following changes the directory to* `wrs:~leslie/target/config':* .CS*     -> cd "config"* .CE* After the previous command, the following changes the directory to* `wrs:~leslie/target/demo':* .CS*     -> cd "../demo"* .CE* After the previous command, the following changes the directory to* `wrs:/etc'.* .CS*     -> cd "/etc"* .CE* Note that `~' can be used only on network devices (RSH or FTP).** RETURNS: OK or ERROR.** SEE ALSO: pwd(),* .pG "Target Shell"*/STATUS cd    (    char *name 		/* new directory name */    )    {    if (ioDefPathCat (name) != OK)	{	printf ("cd: error = %#x.\n", errno);	return (ERROR);	}    return (OK);    }/********************************************************************************* pwd - print the current default directory** This command displays the current working device/directory.** RETURNS: N/A** SEE ALSO: cd(),* .pG "Target Shell,"* windsh,* .tG "Shell"*/void pwd (void)    {    char name [MAX_FILENAME_LENGTH];    ioDefPathGet (name);    printf ("%s\n", name);    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -