我正在尝试创建一个简单的程序,它创建一个文件,在上面写入,然后移回指针,最后读取它。
#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 %dn",errno);
return 1;
}
ssize_t size = write(fd, "Halo",4);
if(size==-1){
printf("Error %dn",errno);
return 1;
}
char string[50];
lseek(fd,0,SEEK_SET);
while((size = read(fd, string, 49)) >0){
printf("Read[%d]: %sn",size,string);
}
printf("Size: %dn",size);
if(size==-1){
printf("Error %dn",errno);
return 1;
}
int c=close(fd);
if(c==-1){
printf("Error %dn",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);
创建文件,因为如果我使用O_RDONLY | O_WRONLY,"create"不适用于读取(手册页(,"open"也不适用于O_RDWR。