UNIX read()/ write()函数

时间:2015-01-21 11:48:28

标签: c

我编写了一个程序。它工作正常,直到打印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;
 }

1 个答案:

答案 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 )