zl程序教程

您现在的位置是:首页 >  其他

当前栏目

实现一个最简单的VIM文本编辑器(可能有bug,随便写了一个)

BUGVim 实现 一个 简单 可能 文本编辑 随便
2023-09-27 14:28:47 时间

简单的写了一个文本编辑器,功能很简单,但足以把文件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 ;




centos 网站漏洞修复之vim文本编辑BUG分析与修复方案 linux系统一直以来都是比较安全的,不管是系统内核还是一些第三方软件都没有太大的漏洞,包括前几年爆出的redis漏洞,没有太多漏洞,然后最近linux频频爆出高危的漏洞,使用vim文本编辑器很多年了,得知被爆出远程代码执行漏洞,有点不可思议,全国大多数的linux服务器都使用的是vim,包括centos系统,redhat,关于该漏洞的详情以及修复方案,我们SINE安全来详细的跟大家介绍一下:
关于vim的使用,通过博客,无论是静态的截图或者是代码/文本复制,很难展示所要表现的内容。更多需要读者亲自敲键盘实践之后才知道其作用。 本文不会也无法描述vim过多的细节,仅仅是对于常用的命令做一下记录,因为vim的帮助文档很庞当。
morixinguan ITGEGE在线教育嵌入式开发讲师。 CSDN博客专家、CSDN-Linux特邀编辑、CSDN博乐、CSDN学院讲师,目前从事嵌入式开发领域,从事与单片机,Linux,android相关的产品开发。