C语言接口的写法(以toyls命令为例)
#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命令为例)的更多相关文章
- go语言之行--文件操作、命令行参数、序列化与反序列化详解
一.简介 文件操作对于我们来说也是非常常用的,在python中使用open函数来对文件进行操作,而在go语言中我们使用os.File对文件进行操作. 二.终端读写 操作终端句柄常量 os.Stdin: ...
- 07. Go 语言接口
Go 语言接口 接口本身是调用方和实现方均需要遵守的一种协议,大家按照统一的方法命名参数类型和数量来协调逻辑处理的过程. Go 语言中使用组合实现对象特性的描述.对象的内部使用结构体内嵌组合对象应该具 ...
- 浅入浅出 Go 语言接口的原理
浅入浅出 Go 语言接口的原理 接口是 Go 语言的重要组成部分,它在 Go 语言中通过一组方法指定了一个对象的行为,接口 interface 的引入能够让我们在 Go 语言更好地组织并写出易于测试的 ...
- Swift中对C语言接口缓存的使用以及数组、字符串转为指针类型的方法
由于Swift编程语言属于上层编程语言,而Swift中由于为了低层的高性能计算接口,所以往往需要C语言中的指针类型,由此,在Swift编程语言刚诞生的时候就有了UnsafePointer与Unsafe ...
- C语言接口与实现实例
一个模块有两部分组成:接口和实现.接口指明模块要做什么,它声明了使用该模块的代码可用的标识符.类型和例程,实现指明模块是如何完成其接口声明的目标的,一个给定的模块通常只有一个接口,但是可能会有许多种实 ...
- [转]SQLITE3 C语言接口 API 函数简介
SQLITE3 C语言接口 API 函数简介 说明:本说明文档属作者从接触 SQLite 开始认识的 API 函数的使用方法, 由本人翻译, 不断更新. /* 2012-05-25 */ int sq ...
- 基于Oracle OCI的数据访问C语言接口ORADBI .
基于Oracle OCI的数据访问C语言接口ORADBI cheungmine@gmail.com Mar. 22, 2008 ORADBI是我在Oracle OCI(Oracle 调用接口)基础 ...
- R语言如何将字符串转变为命令执行
这里用到 eval() 和 parse() 函数.首先使用 parse() 函数将字符串转化为表达式(expression),而后使用 eval() 函数对表达式求解.x <- 1:10a &l ...
- 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 ...
随机推荐
- python编写接口
- LoadRunner功能的Jmeter实现
- JMeter二次开发(2)-编写 JSON Assertion 插件
本篇文章主要介绍如何对JMeter进行二次开发,添加自己所需的功能.这里以Json验证为例进行说明.在web接口测试过程中,JSON的应用已经非常普遍,但原声的JMeter并没有提供Json及Json ...
- MATLAB 实用函数
MATLAB个人工具箱(MATLAB) mymail.m 可以利用MATLAB发送邮件(支持附件和群发),非常实用的函数,适用于:耗时很长的脚本完成后通知作者:外加定时器后用于信息推送:家庭监视器紧急 ...
- VI小技巧
i.a 进入编辑模式 shift+a 到行尾insert o 在光标下一行编辑 shift+o 在光标上一行编辑 yy 复制 p ...
- Devexpress中WebChartControl控件柱状统计图的做法(数据为调用存储过程)
//前台控件代码:WebChartControl控件: <%-- 月采购量统计--%> <dxchartsui:WebChartControl ID="WebChartCo ...
- _config.json
{ "AUTH": "66D86F40DF42A6103C2B0C2F16E41472DABF0594C79859E5EF51E06B377215F3B464E3F0F3 ...
- Android IOS WebRTC 音视频开发总结(四七)-- 深度解读国内首届WebRTC大会背后的真相
本文主要解读国内首届WebRTC大会背后的真相,文章来自博客园RTC.Blacker,支持原创,转载必须说明出处,更多详见www.rtc.help -------------------------- ...
- 第四章_PHP基本语法(2)
1.常量的声明 在PHP中,定义常量使用define()函数来实现 2.魔术常量 名称 作用 __LINE__ 返回文件中的当前行号 __FILE__ 返回该文件的完整路径和文件名 __DIR__ 返 ...
- leetcode2:Add Two Numbers
Add Two Numbers Total Accepted: 55216 Total Submissions: 249950My Submissions You are given two link ...