Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Lseek不工作_C_File Descriptor_Lseek - Fatal编程技术网

C Lseek不工作

C Lseek不工作,c,file-descriptor,lseek,C,File Descriptor,Lseek,我正在尝试使用lseek检查我的txt文件的大小。不幸的是我没有工作。 我的T.Txt包含16个字符:abcdabcddabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabc。所以数字变量应该是16+1。为什么是19呢?第二个问题为什么我不能使用 从最后一个位置1开始搜索_END-1。?如果你能帮我,我将不胜感激 int main

我正在尝试使用lseek检查我的txt文件的大小。不幸的是我没有工作。 我的T.Txt包含16个字符:abcdabcddabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabc。所以数字变量应该是16+1。为什么是19呢?第二个问题为什么我不能使用 从最后一个位置1开始搜索_END-1。?如果你能帮我,我将不胜感激

int main(void)
{
    int fd1 = open("T.txt", O_RDONLY);
    long  number;

    if (fd1 < 0) {
        return -1;
    }

    number = lseek(fd1, 0, SEEK_END); 
    printf("FILE size PROGRAM>C: %ld\n", number);

return 0;
}
int main(无效)
{
int fd1=打开(“T.txt”,仅限Ordu);
长数;
if(fd1<0){
返回-1;
}
编号=lseek(fd1,0,搜索结束);
printf(“文件大小程序>C:%ld\n”,编号);
返回0;
}

这可能是因为文件中的
\r\n
字符在Windows系统中代表换行符

在我的机器(Mac OS X 10.10)上,如果文件末尾没有任何换行符,即只有字符串:
abcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd


您正确使用了
lseek()
函数,除了
lseek()
的结果是
off\t
不是
long
这可能是因为文件中的
\r\n
字符在Windows系统中代表换行符

在我的机器(Mac OS X 10.10)上,如果文件末尾没有任何换行符,即只有字符串:
abcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd


除了
lseek()
的结果是
off\t
而不是
长的

之外,您可以正确使用
lseek()
功能。您的文本文件可能包含BOM标题
0xEF、0xBB、0xBF
。 试着用十六进制打印文件内容,看看它是否打印出这3个额外的字符


您可以在此了解有关[文件头和BOM表]的更多信息。()

您的文本文件可能包含BOM表头
0xEF、0xBB、0xBF
。 试着用十六进制打印文件内容,看看它是否打印出这3个额外的字符


您可以在此处了解有关[文件头和BOM]的更多信息。()

可能是因为BOM。OT:
lseek()
返回
off\t
not
long
SEEK\u END
本身不是一个“数字”,而是一个
enum
。基本上,它是告诉
lseek()
在文件中跳到哪里的一种方法。你不能(合理地)对它进行算术运算。可能是因为一个BOM.OT:
lseek()
返回
off\t
not
long
SEEK\u END
本身不是一个“数字”,而是一个
枚举。基本上,它是告诉
lseek()
在文件中跳到哪里的一种方法。你不能(合理地)用它做算术。那SEEK_END-1呢?为什么我得到的不是18而是0?@user3402584:SEEK_END在大多数实现中是一个常量--
2
。将其更改为
1
,这是
SEEK\u CUR
的常量。你误解了它的目的;这只是为了说明
seek
的另一个参数是什么意思。seek\u END-1呢?为什么我得到的不是18而是0?@user3402584:SEEK_END在大多数实现中是一个常量--
2
。将其更改为
1
,这是
SEEK\u CUR
的常量。你误解了它的目的;它只是告诉你
seek
的另一个参数是什么意思。