23,120
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
int main(int argc, char** argv){
pid_t pid;
int fd = open("./data.dat", O_RDWR|O_TRUNC, 0);
if(fd == -1){
printf("open fails\n");
exit(1);
}
char buf[] = "databuffer\n\0";
if((pid = fork()) < 0){
printf("fork error\n");
return -1;
}else if(pid == 0){
write(fd, buf, strlen(buf));
fsync(fd);
close(fd);
return 0;
}
wait(NULL);
memset(buf, 0, sizeof(buf)/sizeof(char));
lseek(fd, 0, SEEK_SET);
read(fd, buf, strlen(buf));
printf("%s\n", buf);
return 0;
}
memset(buf, 0, sizeof(buf)/sizeof(char));
lseek(fd, 0, SEEK_SET);
read(fd, buf, strlen(buf));
buf已经被你memset了,使用strlen得到的当然是0,你read的语句其实是:
read(3,buf,0);
所以你什么都读不上来了。
另外你的buf指向的空间为常量区,你确定要这么使用么?
write(fd, buf, strlen(buf));
fflush(); // 刷新, 可能函数名错了 , 意思到就行了
fsync(fd);