gpt4 book ai didi

c - 为什么 O_RDWR 在这段代码中没有给我写和读权限?

转载 作者:行者123 更新时间:2023-11-30 16:18:29 25 4
gpt4 key购买 nike

我开始对 C 中的文件描述符感兴趣,我编写了以下代码:

int main (void) 
{
int fd1, fd2, sz;
char *buf = "hello world !!!";
char *buf2 = malloc(strlen(buf));

fd1 = open ("test.txt", (O_RDWR | O_CREAT));
printf("file fd1 created\n");
write(fd1, buf, strlen(buf));
printf("write %s, in filedescpror %d\n", buf, fd1);
sz = read(fd1, buf2, strlen(buf));
printf("read %s, with %d bytes from file descriptor %d\n", buf2, sz, fd1);
close(fd1);
fd2 = open ("testcpy.txt", (O_RDWR | O_CREAT));
write(fd2, buf2, strlen(buf));
close(fd2);
return 0;
}

通常:

  • 提供了两个具有读写权限的文件,
  • buf 粘贴到 fd1
  • 读取fd1并将数据存储在bf2
  • bf2 被解析为 fd2

第一个问题是我在结果中获得的权限不正确,发生的情况是 buf2 之外的内容被解析为 fd2

谁能告诉我发生了什么事,我的代码是否错误,或者发生的事情是否是预期的行为。

最佳答案

您需要在 write() 之后倒回 buff,并添加权限(open() 的第三个参数),这是一个基本示例:

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

int main (void)
{
int fd1, fd2, sz;
char *buf = "hello world !!!";
char *buf2 = malloc(strlen(buf) + 1); // space for '\0'

fd1 = open ("test.txt", (O_RDWR | O_CREAT), 777); // 3rd arg is the permissions
printf("file fd1 created\n");
write(fd1, buf, strlen(buf));
lseek(fd1, 0, SEEK_SET); // reposition the file pointer
printf("write %s, in filedescpror %d\n", buf, fd1);
sz = read(fd1, buf2, strlen(buf));
buf[sz] = '\0';
printf("read %s, with %d bytes from file descriptor %d\n", buf2, sz, fd1);
close(fd1);
fd2 = open ("testcpy.txt", (O_RDWR | O_CREAT));
write(fd2, buf2, strlen(buf));
close(fd2);
return 0;
}

关于c - 为什么 O_RDWR 在这段代码中没有给我写和读权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55892017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com