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

时间:2018-11-27 09:07:15

标签: c file

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

#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);

按照建议,但我仍然遇到相同的错误。

1 个答案:

答案 0 :(得分:1)

我不得不使用

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

要创建文件,因为如果我使用O_RDONLY | O_WRONLY,则“创建”不适用于读取(see working code here),而对我来说,“打开”不能用作O_RDWR。