实现一个最简单的VIM文本编辑器(可能有bug,随便写了一个)
来源:互联网 发布:魅动力知乎 编辑:程序博客网 时间:2024/04/29 07:56
简单的写了一个文本编辑器,功能很简单,但足以把文件IO相关的操作熟悉了,可能功能或者分配的大小还不够完善。请参考参考:
#include <stdio.h>#include <conio.h>#include <stdlib.h>#include <string.h>#include <windows.h>#include <fcntl.h>int count ;char ch = 0;char file_name[20]={0};char buffer[1024*1024]={0};//退出文本编辑器int exit_editor(){ printf("exit editor!\n"); memset(buffer, 0,1024*1024); system("cls"); return -1 ;}//文本编辑模式int text_editor_mode(){ int flag ; char input_ch = 0 ; flag = 0 ; count = 0 ; system("cls"); //进入编辑文本模式 printf("\a"); //清空数组 while(1) { input_ch = getch(); //ESC按键 if(input_ch == 0x1B) { printf("exit editor\n"); system("cls"); flag = 1 ; return flag ; } //ENTER按键---->实现文本编辑器换行 if(input_ch == 0x0d) { putchar('\n'); } //输入的内容不是ESC按键的情况下就将文本信息保存到数组里去 if(input_ch != 0x1B) { buffer[count] = input_ch ; putchar(input_ch); count++; } }}//文本保存模式int save_text_mode(){ int flag ; flag = 0 ; system("cls"); printf("plase input file name\n"); scanf("%s",file_name); int openfd = open(file_name,O_CREAT | O_TRUNC | O_RDWR); if(-1 == openfd){ printf("open file fair!\n"); memset(buffer, 0,1024*1024); memset(file_name,0,20); return -1 ; } write(openfd,buffer,count); printf("save file success\n"); memset(buffer, 0,1024*1024); memset(file_name,0,20); close(openfd); printf("file save success!file_name:%s\n",file_name); system("cls"); flag = 1 ; return flag ;}//读取一个文件的信息int read_file(){ char *file = NULL; char *file_buffer = NULL ; system("cls"); int fle_flag = 0 ; int count_fd ; file = malloc(20); file_buffer = malloc(1024); printf("please input file name!\n"); scanf("%s",file); system("cls"); printf("please input file size!\n"); scanf("%d",&count_fd); int fd = open(file,O_RDONLY); if(-1 == fd) fprintf(stderr,"open file error"); system("cls"); int i ; read(fd,file_buffer,count_fd); for(i = 0 ; i < count_fd ; i++) { printf("%c",file_buffer[i]); } while(1) { char rch = getch(); if(rch == 0x1B){ system("cls"); break ; } } free(file); free(file_buffer); close(fd); fle_flag = 1 ; return fle_flag ;}int main(void){ int file_fd = -1; int ret = 0; int exit_ret = 0; int save_ret = 0; int read_ret = 0 ; //重新开始 Rep: printf("Welcome to yyx develop VIM-EDITUO\n"); printf("please input i to editor ,r to read , w to save , q to quit\n"); while(1) { ch = getch(); switch(ch) { case 'w': save_ret = save_text_mode(); break ; case 'i': ret = text_editor_mode(); break ; case 'q': exit_ret = exit_editor(); break ; case 'r': read_ret = read_file(); break ; } if(ret == 1 || save_ret == 1 || read_ret == 1) goto Rep ; if(exit_ret == -1) break ; } return 0 ;}
0 0
- 实现一个最简单的VIM文本编辑器(可能有bug,随便写了一个)
- 自己写的一个链表,可能有bug
- 随便写了一个list
- python2.7练习 写一个简单的文本编辑器
- 一个简单的文本编辑器
- 一个简单的文本编辑器
- 一个简单的文本编辑器
- extjs产生一个有编辑器的window最简单代码
- 随便写了一个带多选的简单的新闻发布系统,大家有更好的写法可以在该下!嘿嘿,因为我是新手
- 很简单的一个在线文本编辑器
- 2.构建一个简单的文本编辑器
- wxPython构建一个简单的文本编辑器
- 3.构建一个简单的文本编辑器
- 2.构建一个简单的文本编辑器
- 如何写一个简单的webserver(一):最简实现
- 实现了一个简单的聊天软件,但是有个BUG,一直没有想通问题出在哪里。
- 写了一个线上bug
- 一个简单的文本编辑器。(是在DEV C++下写的)
- cell UIlabel 自适应
- Android Gradle 学习使用
- 如何高效加载Bitmap
- javascript中数组的一些常用方法
- Android 全屏无标题
- 实现一个最简单的VIM文本编辑器(可能有bug,随便写了一个)
- 排列的字典序问题 算法与设计
- 【bzoj 2330】[SCOI2011]糖果 差分约束
- iOS中Block的基础用法
- android 底部导航栏
- Web:前门进后门出(HTML+CSS>小笔记)
- c#-计算两个空间点形成的单位向量
- http与https的介绍
- CSDN进入不了博客界面