我正在研究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
如何成功而不打开文件?
答案 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;
}