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

📄 shell.c

📁 cryptoboot is set of tools for disk encryption on Unix. It is especially suited to encrypt root par
💻 C
字号:
#include "all.h"#include <stdio.h>#include <readline/readline.h>#include <readline/history.h>#include "shell.h"char* _commandGenerator PARAMS((const char*, int));char**_completion(text, start, end)	const char* text;	int start, end;{	return rl_completion_matches(text, _commandGenerator);}char*_commandGenerator(text, state)	const char* text;	int state;{	static int index, len;	char* name;		if (state == 0)	{		index = 0;		len = strlen(text);	}		while ((name = commands[index].name))	{		index++;		if (0 == strncmp(name, text, len))			return strdup(name);	}	return (char*) NULL;}intfindCommand(out_c, name)	Command** out_c;	char* name;{	int i;	for (i = 0; NULL != commands[i].name; i++)		if (0 == strcmp(name, commands[i].name))		{			*out_c = &commands[i];			return 1;		}	return -1;}voidinitReadline(){	rl_attempted_completion_function = _completion;	return;}/* Warning: modifies str FIXME: add strdup to prevent it? */intexecuteLine(str)	char* str;{	char* commandName;	char* arg;	Command* command;	int ret;		/* Isolate command name and argument from line */	split(&commandName, &arg, str);	/* Find function pointer */	ret = findCommand(&command, commandName);	if (ret == -1)	{		printf("No such command '%s'.\n", commandName);		ret = 1;	}	else	{		ret = (*command->func)(arg);	}	return ret;}voidopenShell(){	char* rawLine;	char* line;	int cont;		initReadline();	cont = 1;	while(cont != -1)	{		rawLine = readline("> ");		if (NULL == rawLine)		{			printf("quit\n");			free(rawLine);			return;		}				line = trim(rawLine);		if (0 != strcmp(line, ""))		{			add_history(line);			cont = executeLine(line);		}		free(rawLine);	}}

⌨️ 快捷键说明

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