#include <unistd.h>

 #include <stdio.h>
#include <stdlib.h>
#include <string.h> #define CMDSIZE 4096 static void prompt(void)
{
printf("[mysh]$ ");
fflush(stdout);
} static void getcmd(char *cmd, char **argv)
{
int i = ; fgets(cmd, CMDSIZE, stdin); argv[i] = strtok(cmd, " \t\n");
for (i++; argv[i - ] != NULL; i++) {
argv[i] = strtok(NULL, " \t\n");
}
} static void myexit(char **argv)
{
exit();
} static void mycd(char **argv)
{
chdir(argv[]);
} #define NAMESIZE 256
struct {
void (*func)(char **);
char name[NAMESIZE];
} internal_list[] = {
{myexit, "exit"},
{mycd, "cd"},
{NULL, },
}; static int internal_ind(const char *name)
{
int i; for (i = ; internal_list[i].func != NULL; i++) {
if (strcmp(name, internal_list[i].name) == ) {
return i;
}
}
return -;
} int main(void)
{
char cmd[CMDSIZE];
char *argv[CMDSIZE / ];
pid_t pid;
int ind; while () {
prompt(); getcmd(cmd, argv);
if ((ind = internal_ind(argv[])) != -) {
internal_list[ind].func(argv);
} else {
pid = fork();
/* if error */
if (pid == ) {
execvp(argv[], argv);
perror(argv[]);
exit();
}
wait(NULL);
}
} return ;
}

C语言接口的写法(以toyls命令为例)的更多相关文章

  1. go语言之行--文件操作、命令行参数、序列化与反序列化详解

    一.简介 文件操作对于我们来说也是非常常用的,在python中使用open函数来对文件进行操作,而在go语言中我们使用os.File对文件进行操作. 二.终端读写 操作终端句柄常量 os.Stdin: ...

  2. 07. Go 语言接口

    Go 语言接口 接口本身是调用方和实现方均需要遵守的一种协议,大家按照统一的方法命名参数类型和数量来协调逻辑处理的过程. Go 语言中使用组合实现对象特性的描述.对象的内部使用结构体内嵌组合对象应该具 ...

  3. 浅入浅出 Go 语言接口的原理

    浅入浅出 Go 语言接口的原理 接口是 Go 语言的重要组成部分,它在 Go 语言中通过一组方法指定了一个对象的行为,接口 interface 的引入能够让我们在 Go 语言更好地组织并写出易于测试的 ...

  4. Swift中对C语言接口缓存的使用以及数组、字符串转为指针类型的方法

    由于Swift编程语言属于上层编程语言,而Swift中由于为了低层的高性能计算接口,所以往往需要C语言中的指针类型,由此,在Swift编程语言刚诞生的时候就有了UnsafePointer与Unsafe ...

  5. C语言接口与实现实例

    一个模块有两部分组成:接口和实现.接口指明模块要做什么,它声明了使用该模块的代码可用的标识符.类型和例程,实现指明模块是如何完成其接口声明的目标的,一个给定的模块通常只有一个接口,但是可能会有许多种实 ...

  6. [转]SQLITE3 C语言接口 API 函数简介

    SQLITE3 C语言接口 API 函数简介 说明:本说明文档属作者从接触 SQLite 开始认识的 API 函数的使用方法, 由本人翻译, 不断更新. /* 2012-05-25 */ int sq ...

  7. 基于Oracle OCI的数据访问C语言接口ORADBI .

    基于Oracle OCI的数据访问C语言接口ORADBI cheungmine@gmail.com Mar. 22, 2008   ORADBI是我在Oracle OCI(Oracle 调用接口)基础 ...

  8. R语言如何将字符串转变为命令执行

    这里用到 eval() 和 parse() 函数.首先使用 parse() 函数将字符串转化为表达式(expression),而后使用 eval() 函数对表达式求解.x <- 1:10a &l ...

  9. 18 A GIF decoder: an exercise in Go interfaces 一个GIF解码器:go语言接口训练

    A GIF decoder: an exercise in Go interfaces  一个GIF解码器:go语言接口训练 25 May 2011 Introduction At the Googl ...

随机推荐

  1. matlab 椭圆方程拟合

    拟合椭圆首先要知道各个点的坐标,然和带入如下公式: x = [59 136 58 137 57 137 56 137 55 138 54 139 53 140 52 141 51 142 51 143 ...

  2. IOS thread1:exc_bad)access(code=exc_1386_gpflt)错误

    这种错误通常是内存管理的问题,一般是访问了已经释放的对象导致的,可以开启僵尸对象(Zombie Objects)来定位问题: 在Xcode的菜单: Product->Scheme->Edi ...

  3. 浅谈 cookie 和 session

    1.关闭浏览器后,session是否还存在? session在服务器和客户端各保留一个副本,关闭浏览器与否和session是否存在没有任何关系. session采取的是服务器端保持状态的方案,它存储在 ...

  4. c# 将页面导出到word(含图片及控件)

    /// <summary> /// 创建word /// <param name="filePath">文件路径 </param> /// &l ...

  5. 转)SSO单点登录在互联网电商应用中的解决方案(基于CAS的改造)

    电商平台中无论是前端还是后端会存在大量的业务应用,在整个交易的过程中请求是在各个业务应用中流转的,对于用户来讲只需要登录一次就可以访问所有的业务,这就是单点登录SSO. 单点登录开源有很多的解决方案, ...

  6. ios delegate 代理模式 观察者模式 不同视图间的通信

    delegate,在ios中比比皆是,NSURLConnection(网络请求有),tableView, connectionView,等系统自带 的常见代理.甚至,自己写代码的时候,随意间敲打出了p ...

  7. CSS阻止页面双击选中文本

    转载自:w3cui 在双击左右箭头,快速切换图片滚动时,会选择附近区域的文字,感觉不是很好,今天在同事在分享时,讲到了这个问题, 试了一下,不错,解决了问题IE及Chrome下的方法一样,对相应的元素 ...

  8. PHP:PHP页面编码问题(转载)

    MySQL数据库编码.html页面编码.PHP或html文件本身编码要全部一致. 1.MySQL数据库编码:建立数据库时指定编码(如gbk_chinese_ci),建立数据表.建立字段.插入数据时不要 ...

  9. jsp页面el表达式不起作用

    web.xml中2.4版本的默认导入的standerd.jar,和jstl.jar是使用el表达式的包是启动的而2.5版本的web.xml中默认是关闭的所以在2.5的所有jsp中需要启动一下用< ...

  10. linq to xml 基本操作

    使用XDocument类来进行简单的xml操作,用于软件参数的设置保存. using System; using System.Collections.Generic; using System.Li ...