我编写了一个程序。它工作正常,直到打印n变量之后,它不打印buf2.Can任何人都告诉我为什么它发生了什么应该是正确的方法?同样的方法适用于test.txt已经创建但是不适用于我们仅在此代码中创建的file.txt
#include<sys/stat.h>
#include<sys/types.h>
#include<stdio.h>
#include<fcntl.h>
int main()
{
int fd1,m,n;
int fd2;
fd2=open("test.txt",O_RDWR);
fd1=open("file.txt",O_CREAT|O_RDWR,S_IRWXU);
if (fd1==0)
printf("error");
else
printf("file created \t %d\n",fd1);
char buf[6];
fgets(buf,6,stdin);
printf("%s",buf);
n=write(fd1,buf,6);
printf("\n\n%d",n);
char buf2[6];
read (fd2, buf2,6) ;
printf("final \t %s",buf2);
//From here not getting desired o/p
m=read(fd1,buf2,n);
printf("\n\n%d",m);
printf("\nstring is \n");
write(1,buf2,m);
close(fd1);
return 0;
}
答案 0 :(得分:2)
在第一个读取文件偏移量已移至文件的第7个字节后。要将其返回到起始位置,请使用lseek
功能。
off_t lseek(int fd, off_t offset, int whence);
在你的情况下:
lseek(fd1, 0, SEEK_SET); // reposition fd1 to beginning of file
并检查条件,您必须将open
的返回值与-1
进行比较。
if ( fd1 == -1 )