Linux文件附加操作

时间:2015-07-24 10:45:14

标签: linux file append

任何人都可以解释一下文件如何附加在Linux上的一般工作?

例如:
1.
文件以附加模式打开
写入文件
关闭文件

  1. 文件以附加模式打开
    写入文件
    关闭文件
  2. 当上面执行第二个操作时,文件是否会被追加而不实际被删除?

    执行上述操作的方式会影响闪光灯磨损。

2 个答案:

答案 0 :(得分:0)

  

当上面执行第二个操作时,文件是否正好   附加而不实际被删除?

使用fopen()在Linux中实现文件/流打开操作,以执行所需的操作。有关详细信息,请参阅man 3 fopen

FILE *fopen(const char *path, const char *mode);

fopen()函数打开文件,其名称是path指向的字符串,并将流与之关联。

附加的两种模式是: -

a -----打开以进行追加(在文件末尾写入)。如果文件不存在,则创建该文件。流位于文件末尾。

a + -----打开以供阅读和追加(在文件末尾写入)。如果文件不存在,则创建该文件。读取的初始文件位置位于文件的开头,但输出始终附加到文件的末尾。

  

以附加模式打开文件(作为模式的第一个字符)   导致对此流的所有后续写操作发生在   文件结束,好像在通话之前:

 fseek(stream, 0, SEEK_END);

此外,打开现有文件以进行追加和创建不存在的文件的最佳方法是对fopen()进行两次单独调用。第一个调用尝试附加到该文件。如果失败(当fopen()返回0时),则尝试使用“w”模式打开文件。

查看this link on Append or Create a File Using fopen()了解详情。

答案 1 :(得分:0)

第二个操作不会删除(第一个)文件。 但它确实会移动第二个文件的数据。

删除任何* nix系统上的文件意味着删除 inode (这只是指向文件实际启动的磁盘/ ssd / flash上​​的位置的指针。)实际数据不会被覆盖或甚至感动了。

inode数据的示例如下所示:

$ stat file.sh 
  File: ‘file.sh’
  Size: 289         Blocks: 8          IO Block: 4096   regular file
Device: 813h/2067d  Inode: 528981      Links: 1
Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-07-24 13:06:57.806899456 +0200
Modify: 2015-07-24 13:06:54.822899376 +0200
Change: 2015-07-24 13:06:54.822899376 +0200
 Birth: -

如果它影响闪光灯磨损取决于文件大小;如果你有许多非常小的文件和大量的操作,那么inode可以占用实际(磁盘/闪存)大小的百分之几。如果您的操作很少(也许是大文件),那么我不会担心闪存磨损。