用C编写一个简单的create-lsek-read程序



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

#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。

最新更新