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

📄 cd.c

📁 操作系统源代码
💻 C
字号:
/* cd -- change working directory	Author: Thomas Brupbacher *//* ------------------------------------------------------------------------- * lit.: 	POSIX 1003.2/D10 section 4.5 * * Thomas Brupbacher (tobr@mw.lpc.ethz.ch)	Oct 1990 * ------------------------------------------------------------------------- * * This is a new implementation of cd, written from scratch. * cd uses the environment variables HOME and CDPATH to determine where * to chdir. */#include <sys/types.h>#include <stdlib.h>#include <limits.h>#include <string.h>#include <unistd.h>#include <stdio.h>_PROTOTYPE(int main, (int argc, char **argv));_PROTOTYPE(void get_next_prefix, (char *string, char prefix [PATH_MAX ]));int main(argc, argv)int argc;char **argv;{  char *string;  char *prog = *argv;  char prefix[PATH_MAX];  int cdflag, cdpath_flag;  if (argc == 1) {		/* no directory on command line, cd to home			 * dir						 */	string = getenv("HOME");	if (string == NULL) {		fprintf(stderr, "no home directory, directory not changed\n");		return(1);	}  }  if (argc > 2)			/* more than one dir on the command line */	fprintf(stderr, "%s: ignoring arguments\n", prog);  argv++;  string = getenv("CDPATH");  if (string == NULL)/* CDPATH not set, cd relative to .	 */	cdflag = chdir(*argv);  else {	cdpath_flag = 1;	do {		get_next_prefix(string, prefix);		if (prefix[0] != '\0') {			strcat(prefix, "/");			strcat(prefix, *argv);			cdflag = chdir(prefix);		}	} while ((cdflag != 0) && (prefix[0] != '\0'));  }  if (cdflag != 0) {	fprintf(stderr, "%s: cannot cd to %s\n", prog, *argv);	return(1);  }  if (cdpath_flag == 1) printf("%s\n", prefix);  return(0);}/* Get_next_prefix() parses the string <string> for the next : or the * end of <string> and copies the parsed chars to <prefix>. */void get_next_prefix(string, prefix)char *string;char prefix[PATH_MAX];{  int index;  if (*(++string) == ':')	/* CDPATH contains "::" 		 */	prefix[index++] = ' ';  while ((*string != ':') && (*string != '\0'))	prefix[index++] = *(string++);  prefix[index++] = '\0';}

⌨️ 快捷键说明

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