任何人都可以解释一下文件如何附加在Linux上的一般工作?
例如:
1.
文件以附加模式打开
写入文件
关闭文件
当上面执行第二个操作时,文件是否会被追加而不实际被删除?
执行上述操作的方式会影响闪光灯磨损。
答案 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”模式打开文件。
答案 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可以占用实际(磁盘/闪存)大小的百分之几。如果您的操作很少(也许是大文件),那么我不会担心闪存磨损。