无法“打开”文件,但`lseek`完成没有错误

时间:2013-09-04 14:33:33

标签: c++ c unix

我正在研究unix system calls。 在我的代码中,我想open该文件并对该文件执行lseek操作。 请查看以下代码。

#include <stdio.h>
#include <fcntl.h>
#include <sys/types.h>
#include <unistd.h>

int main(void)
{

 int fd;


 fd = open("testfile.txt", O_RDONLY);
 if(fd < 0 );
   printf("problem in openning file \n");

 if(lseek(fd,0,SEEK_CUR) == -1)
   printf("cant seek\n");
 else
   printf("seek ok\n");

 exit(0);

} 

我的输出是:

   problem in openning file 
   seek ok

我的问题是:

1)为什么open系统调用给我负面文件描述符? (我已经确定testfile.txt文件在同一目录中)

2)这里我无法打开文件(因为open()返回负文件描述符),lseek如何成功而不打开文件?

2 个答案:

答案 0 :(得分:6)

实际上,您已成功打开文件。

只是if(fd < 0 );错误,您需要删除;

答案 1 :(得分:2)

大多数API会告诉您错误发生的原因,以及通过查看open()(并使用errno获取错误的文本版本)来实现strerror()等系统调用)。请尝试以下操作(删除错误):

#include <stdio.h>
#include <fcntl.h>
#include <sys/types.h>
#include <unistd.h>
#include <errno.h>

int main(void)
{

 int fd;


 fd = open("testfile.txt", O_RDONLY);
 if(fd < 0 ) {   // Error removed here
   printf("problem in opening file: %s\n", strerror(errno));
   return 1;
 }

 if(lseek(fd,0,SEEK_CUR) == -1)   // You probably want SEEK_SET?
   printf("cant seek: %s\n", strerror(errno));
 else
   printf("seek ok\n");

 close(fd);

 return 0;

}