调用了write()函数之后,这个进程会关闭打开的文件?

发布于 2022-09-05 21:48:00 字数 1743 浏览 14 评论 0

我有一个需要被操作的文件,叫做:save.txt
开始,这个文件里的内容是空的:

clipboard.png

对这个文件执行了如下代码:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main(int argc, char const *argv[])
{
    int fd, len = 10, ret;
    char* buf = "hello";
    char save[255];

    fd = open ("save.txt", O_RDWR);
    ret = write(fd, buf, strlen(buf));

    read(fd, save, 100);

    printf("%s\n", save);
    return 0;
}

得到以下输出:

clipboard.png

也就是只输出了换行,没有输出文件里的内容。但是,执行完了那段代码之后,那个hello字符串已经写进那个save.txt文件里了:

clipboard.png

之后,我在读文件之前,又重新打开了一次文件,就可以读出结果了:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main(int argc, char const *argv[])
{
    int fd, len = 10, ret;
    char* buf = "hello";
    char save[255];

    fd = open ("save.txt", O_RDWR);
    ret = write(fd, buf, strlen(buf));

    fd = open ("save.txt", O_RDWR);
    read(fd, save, 100);

    printf("%s\n", save);
    return 0;
}

clipboard.png

那么问题来了:在执行完了write函数之后,这个进程会自动关闭这个文件?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

情深如许 2022-09-12 21:48:00

这是因为你读和写用的是同一个 fd,写完后文件指针随着移动到末尾了,读的时候从文件尾部自然读不出任何数据了。可以尝试在写完后用 lseek 把文件指针重置一下。

lseek(fd, 0, SEEK_SET);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文