gpt4 book ai didi

c - 简单的C语言创建-lseek-读取程序

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

我正在尝试创建一个简单的程序,它创建一个文件,在其上写入,然后向后移动指针,最后读取它。

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

int main(){

int fd = creat("/home/alum/Class/ej",S_IRWXU);
if(fd==-1){
printf("Error %d\n",errno);
return 1;
}

ssize_t size = write(fd, "Halo",4);
if(size==-1){
printf("Error %d\n",errno);
return 1;
}

char string[50];
lseek(fd,0,SEEK_SET);
while((size = read(fd, string, 49)) >0){
printf("Read[%d]: %s\n",size,string);
}

printf("Size: %d\n",size);

if(size==-1){
printf("Error %d\n",errno);
return 1;
}

int c=close(fd);
if(c==-1){
printf("Error %d\n",errno);
return 1;
}

return 0;
}

我的问题是“lseek”似乎不起作用。当我尝试阅读时,我总是得到大小“-1”,所以我认为我不会回到文件的开头...有什么建议吗?

我看到了一些与 lseek 相关的问题,但我还没有找到解决我的问题的方法。

编辑:

我变了

  int fd = creat("/home/alum/Class/ej",S_IRWXU);

  int fd = open("/home/alum/Class/ej",O_CREAT|O_RDONLY|O_WRONLY|O_TRUNC);

也尝试过

  int fd = open("/home/alum/Class/ej",O_CREAT|O_RDONLY|O_WRONLY|O_TRUNC,0700);

按照建议,但我不断收到相同的错误。

最佳答案

我必须使用

int fd = open("/home/alum/Class/ej",O_CREAT|O_RDWR|O_TRUNC,0700);

创建文件,因为“creat”不适用于读取( manpage ),并且如果我使用 O_RDONLY|O_WRONLY ,“open”对我来说不能用作 O_RDWR 。

关于c - 简单的C语言创建-lseek-读取程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53496085/

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