当前位置: 技术问答>linux和unix
请问关于 open 和 creat 的区别?
来源: 互联网 发布时间:2016-03-13
本文导语: #include #include #include #include #include int main() { int fd; char buf[] = "system!"; close (STDOUT_FILENO); fd = creat("temp.tmp", S_IRWXU); printf("fd = %dn", fd); wri...
#include
#include
#include
#include
#include
int main()
{
int fd;
char buf[] = "system!";
close (STDOUT_FILENO);
fd = creat("temp.tmp", S_IRWXU);
printf("fd = %dn", fd);
write(fd, buf, sizeof(buf));
printf("fd = %dn", fd);
write(fd, buf, sizeof(buf));
return 0;
}
运行结果为
在文件 temp.tmp 中的内容为
system!system!
fd = 1
fd = 1
但是如果程序为
#include
#include
#include
#include
#include
int main()
{
int fd;
char buf[] = "system!";
fd = creat("temp.tmp", S_IRWXU);
printf("fd = %dn", fd);
close (fd);
close (STDOUT_FILENO);
fd = open("temp.tmp", O_WRONLY);
write(fd, buf, sizeof(buf));
printf("fd = %dn", fd);
write(fd, buf, sizeof(buf));
return 0;
}
运行结果为:
fd = 3
文件temp.tmp中的内容为
system!fd = 1
system!
请问各位高手为什么会有这样的区别?
|
跟creat和open木有关系。
把你第二段程序的
close (STDOUT_FILENO);
放在creat前面试试?
另外, write是unbuffer的, printf是buffer的,两个混用的话有可能打印次序和你预计的不一样。
把你第二段程序的
close (STDOUT_FILENO);
放在creat前面试试?
另外, write是unbuffer的, printf是buffer的,两个混用的话有可能打印次序和你预计的不一样。
|
creat(xx,)相当于open(xx,O_CREAT|O_WRONLY|O_TRUNC)
|
concern