【发布时间】:2015-08-27 09:45:59
【问题描述】:
我正在使用 creat 系统调用来创建文件。以下是创建文件的程序
#include<stdio.h>
#include<fcntl.h>
void main()
{
int fd=creat("a.txt",S_IRWXU|S_IWUSR|S_IRGRP|S_IROTH);
printf("fd = %d\n",fd);
}
所以,第一次,程序会创建一个名为 a.txt 的文件,并具有适当的权限。如果我再执行一次 a.out,就会创建新的 a.txt。但是,文件的 inode 保持不变。怎么样,会怎么样。
$ ./a.out
fd = 3
$ ls -li a.txt
2444 -rw-r--r-- 1 mohanraj mohanraj 0 Aug 27 15:02 a.txt
$ cat>a.txt
this is file a.txt
$ ./a.out
fd = 3
$ cat a.txt
$ls -li a.txt
2444 -rw-r--r-- 1 mohanraj mohanraj 0 Aug 27 15:02 a.txt
$
在上面的输出中,a.txt 的内容为“这是文件 a.txt”。一旦我执行了 a.out,就创建了新的 a.txt。但是,inode 2444 保持不变。那么,creat 系统调用是如何工作的呢?
提前致谢。
【问题讨论】:
-
第二次“创建”时该文件已经存在,因此被截断并保持相同的inode编号。
-
来自手册页:
creat() is equivalent to open() with flags equal to O_CREAT|O_WRONLY|O_TRUNC
标签: c linux unix system-calls