文件共享:多个任务共同操作一个文件或者协同完成任务。
面试:写程序删除一个文件的第10行。
类似于删除数组的某一个元素,要做的是将后面的元素都往前移,覆盖要删除的那个元素。
思路:找到第10行的行首和第11行的行首,从第11行开始一个一个往前覆盖。
方法1:
while()
{
/* 找到第11行的行首,读,然后找到第10行的行首,写 */
lseek 11 + read + lseek 10 + write
/* 最后会多出来一个空间,将整体文件的长度做一个新的长度的截短,将多余的那一块截掉 */
/* 函数:truncate/ftruncate */
}
方法2:
// 第一次以只读方式打开
1->open r ->fd1 -> lseek 11
// 第二次以读写方式打开,要确保文件一定存在,所以这里没有用w
2->open r+ ->fd2 -> lseek 10
// 以文件描述符fd1读一块,文件描述符fd2写一块
while()
{
1->fd1->read
2->fd2->write
}
/********************************/
process1->open->r
process2->open->r+
p1->read -> p2->write
truncate
truncate是把未打开的文件截断到多长,ftruncate是把已打开的文件截断到多长。