我正在尝试创建一个简单的程序,该程序创建一个文件,在其上进行写,然后向后移动指针并最终读取它。
#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);
按照建议,但我仍然遇到相同的错误。
答案 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。