文件IO-练手项目-交互式shell-C

第一版

/* 
	Linux API:fflush
	function:实现交互式
*/
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

void nemu(void);
void fun_sleep(const char *c);

int main(int argc, char *argv[])
{
	int i = 0;
	for(;;)
	{
		puts("\033c");		// 清屏
		printf("num=%d\n", i++);
		sleep(1);
		nemu();
	}
	
	exit(EXIT_SUCCESS);
}

void nemu(void)
{
	puts("\033c");		// 清屏
	char c = ' ';
	printf("1.func 1\n");
	printf("2.func 2\n");
	printf("3.func 2\n");
	printf("please input:");
	scanf("%c", &c);
	getchar();
	if (c == 'q')
		exit(EXIT_SUCCESS);
	printf("input is %c", c);
	fflush(stdout);
	sleep(2);
	fun_sleep(&c);
}

void fun_sleep(const char *c)
{
	puts("\033c");		// 清屏
	printf("hello %c", *c);
	//fflush(stdout);
	sleep(1);
	printf("over\n");
}

makefile

#!/bin/bash
target=code
CC=gcc
CFLAGS=-Wall -g

$(target):code.o
	$(CC) -o $(target) code.o $(CFLAGS)
code.o:code.c
	$(CC) -c code.c $(CFLAGS)

.PHONY:clean 
clean:
	rm -f $(target)
	rm -f *.o

第二版

/* 
	Linux API:getcwd\
	function:交互式shell
*/
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>

#define MAX 10

void func_pwd(void);

// 主函数
int main(int argc, char *argv[])
{
	char cmd[MAX] = {};
	puts("\033c");
	for(;;)
	{
		printf(">");
		fflush(stdout);
		scanf("%s", cmd);
		if (strcmp(cmd, "pwd") == 0)
			func_pwd();
		else if((strcmp(cmd, "q") == 0) || (strcmp(cmd, "quit") == 0))
			break;
		else
		{
			printf("error cmd\n");
		}
	}
	puts("C shell over\n");
	exit(EXIT_SUCCESS);
}

void func_pwd(void)
{
	char *path = NULL;
	path = getcwd(NULL, 0);
	printf("%s\n", path);
}

第三版

posted @ 2022-11-01 00:19  steve的miao  阅读(68)  评论(0编辑  收藏  举报