亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 9779 | 回復(fù): 12
打印 上一主題 下一主題

[C] 讀取大于2G文件,stat [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2009-11-17 12:28 |只看該作者 |倒序?yàn)g覽
文件大小是2G以上。想通過下面代碼取得確切的值,可是沒有效果。。。
請指教

long long get_file_size(const char *filename)
{
        struct stat buf;
        if(stat(filename, &buf)<0)
        {
                return 0;
        }
        return (long long)buf.st_size;
}


換成如下編譯不過,struct stat64也是包含在#include <sys/stat.h>這個(gè)頭文件里吧,請指教哪地方錯(cuò)誤。
錯(cuò)誤信息:error: storage size of 'buf' isn't known

long long get_file_size(const char *filename)
{
        struct stat64 buf;
        if(stat64(filename, &buf)<0)
        {
                return 0;
        }
        return (long long)buf.st_size;
}

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2009-11-17 12:38 |只看該作者
既然是編譯不過了,那就跟2G文件也沒有關(guān)系了

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2009-11-17 12:44 |只看該作者

  1. #include <sys/types.h>
  2. #include <sys/stat.h>
  3. #include <unistd.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. long long get_file_size( const char *filename )
  7. {
  8.   struct stat buf;

  9.   if( stat( filename, &buf ) < 0 ) {
  10.     return 0;
  11.   }
  12.   return ( long long )buf.st_size;
  13. }

  14. int main( int argc, char *argv[] )
  15. {
  16.   if( argc < 2 ) {
  17.     printf( "Usage: ./filesize filename\n" );
  18.     exit( 1 );
  19.   }
  20.   printf( "size is %u bytes\n", get_file_size( argv[1] ) );
  21.   return 0;
  22. }
復(fù)制代碼

man 2 stat
你就知道應(yīng)該include哪些文件了

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2009-11-17 12:46 |只看該作者
原帖由 churchmice 于 2009-11-17 12:38 發(fā)表
既然是編譯不過了,那就跟2G文件也沒有關(guān)系了

可能我說的有誤。
stat函數(shù)對小于2G的文件的操作是正卻的,但不能操作大于2G的,
所以,我找了stat64這個(gè)函數(shù),可是這個(gè)函數(shù)在GCC下卻編譯不過。。。。。

編譯選項(xiàng)也加了  -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64,可是還編譯不過。

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2009-11-17 12:48 |只看該作者
原帖由 churchmice 于 2009-11-17 12:44 發(fā)表

#include
#include
#include
#include
#include
long long get_file_size( const char *filename )
{
  struct stat buf;

  if( stat( filename, &buf ) < 0 ) {
    return 0;
  }
  retu ...

頭文件都包含了,現(xiàn)在是編譯stat64()這個(gè)函數(shù)編譯不過。。。。

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2009-11-17 13:32 |只看該作者

回復(fù) #5 Henk2009 的帖子


  1. #define __USE_LARGEFILE64
  2. #define _LARGEFILE_SOURCE
  3. #define _LARGEFILE64_SOURCE
  4. #include <sys/types.h>
  5. #include <sys/stat.h>
  6. #include <unistd.h>
  7. #include <stdio.h>
  8. #include <stdlib.h>

  9. int get_file_size( const char *filename )
  10. {
  11.   struct stat64 buf;

  12.   if( stat64( filename, &buf ) < 0 ) {
  13.     return 0;
  14.   }
  15.   return buf.st_size;
  16. }

  17. int main( int argc, char *argv[] )
  18. {
  19.   if( argc < 2 ) {
  20.     printf( "Usage: ./filesize filename\n" );
  21.     exit( 1 );
  22.   }
  23.   printf( "Filesize is %d bytes\n", get_file_size( argv[1] ) );
  24.   return 0;
  25. }
復(fù)制代碼

這個(gè)可以,直接cc就行了

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2009-11-17 13:47 |只看該作者

stat這樣最恐怖。用的一個(gè)庫,居然用了-D_FILE_OFFSET_BITS=64
而我調(diào)用那個(gè)庫的程序,沒有用這個(gè)選項(xiàng),結(jié)果stat覆蓋掉一片內(nèi)存

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2009-11-17 16:37 |只看該作者
不需要stat64的。修改 CFLAGS,之后就可以了。


  1. CFLAGS += -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGE_FILE_SOURCE -D_LARGEFILE64_SOURCE

  2. assert(sizeof(buf.st_size) == 8)

復(fù)制代碼

[ 本帖最后由 pagx 于 2009-11-17 16:40 編輯 ]

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
9 [報(bào)告]
發(fā)表于 2010-02-04 11:54 |只看該作者
stat這樣最恐怖。用的一個(gè)庫,居然用了-D_FILE_OFFSET_BITS=64
而我調(diào)用那個(gè)庫的程序,沒有用這個(gè) ...
peidright 發(fā)表于 2009-11-17 13:47


操,我也碰到這種問題了,程序一運(yùn)行就崩潰了,后來將頭文件一個(gè)一個(gè)減少,最后發(fā)現(xiàn)是 加了_FILE_OFFSET_BITS 這個(gè)宏的問題

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2010-02-04 11:56 |只看該作者
這就是精驗(yàn)
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP