1 复制
首先将复制的一个直观过程描述一下。打开一个文件,选中一段问题,点击复制。
可以看到从直观上来看,我们复制一个文件需要三个步骤,那么系统底层是如何操作的呢。首先系统底层(以linux为例)全部读写操作都是跟open(),read(),write()相关。
现在我们可以来分析下底层的实现了。首先系统会利用open函数打开文件,同时返回这个文件的描述符,用来对文件进行访问(这个文件描述符是一个接口,实际上的实现是通过指针实现的),然后在通过lseek函数调整读取文件的位置,设置为我们光标选中那一段文字的开始,并且计算出来这段问题字符的长度L。最后通过write函数从刚刚标记好的地方开始标记,读取L个字符,并将这个L个字符保存在缓存区里面去。最后说一下,这个write()read()open()全部都是系统函数,而我们在实际生活中是先调用库函数的比如:fwrite,fread,然后再通过这些库函数去调用系统函数。还有一个点就是这些读写的库函数他们本身就是一个缓存区的,这个缓冲区跟read的缓存区是不同的,是两个缓冲区。
2 剪切
剪切跟复制很相似的,从直观上来款剪切跟复制的区别就在于,选中的数据是否还存在?那么是不是讲剪切跟复制的区别就在于把复制选中的字符删除这一步。把数据删除,在linux里面可以怎么操作,然后就是什么叫做删除。删除的意思跟我们现实生活中的删除不一样,它不是真的让那个字清除掉,那个橡皮擦掉,它只是在操作系统的规则下,读取不到这个文件。在字符数组中,我们也有一些删除字符的操作,我们可以把那个拿过来参考参考。
- 可以给字符添加结束符’\0’
- 假如字符是用链表存储的可以让链表的指向发生改变
3 粘贴
粘贴这个是最简单的了,就是利用一个write命令从缓存区里面读取内容就好的。
4 撤销
将一些命令保存进一个缓存区,并且这个缓存区的数据结构是栈,撤销的目的是:恢复最近的命令。