URN Logo
UNIX Resources » Linux » China Linux Forum » C/C++编程版 » 20 » 请教linux下写大于2G文件问题。
announcement 声明: 本页内容为中国Linux论坛的内容镜像,文章的版权以及其他所有的相关权利属于中国Linux论坛和相应文章的作者,如果转载,请注明文章来源及相关版权信息。
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  业界新闻与评论
  自由软件杂谈
  IT 人生
  Linux软件快递
  翻译作坊
  Linux图书与评论
  GNU Emacs/XEmacs
  Linux 中文环境和中文化
  Linux桌面与办公软件
  Linux 多媒体与娱乐版
  自由之窗Mozilla
  笔记本电脑上的Linux
  Gentoo
  Debian 一族
  网络管理技术
  Linux 安装与入门
  WEB服务器和FTP服务器
  域名服务器和邮件服务器
  Linux防火墙和代理服务器应用
  文件及打印服务器
  技术培训与认证
  Linux内核技术
  Linux 嵌入技术
  Linux设备驱动程序
  Linux 集群技术
  LINUX平台数据库
  系统和网络安全
  CPU 与 编译器
  系统计算研究所专栏
  Linux下的GUI软件开发
  C/C++编程版
  PHP 技 术
  Java&jsp技术
  Shell编程技术
  Perl 编 程
  Python 编 程
  XML/Web Service 技术
  永远的Unix
  FreeBSD世界
   
请教linux下写大于2G文件问题。
请教linux下写大于2G文件问题。 - lshni [2006-01-17 09:03 | 291 byte(s)]
 
Re: 请教linux下写大于2G文件问题。 - Atu [2006-01-17 14:29 | 1,068 byte(s)]
 
题外话 - whone23 [2006-01-19 09:03 | 143 byte(s)]
 
Re: 题外话 - Atu [2006-01-20 08:39 | 386 byte(s)]
 
Re: 题外话 - whone23 [2006-01-20 09:31 | 111 byte(s)]
 
Re: 题外话 - Atu [2006-01-20 13:58 | 272 byte(s)]
 
Re: 题外话 - whone23 [2006-01-20 14:02 | 173 byte(s)]
 
Re: 题外话 - zhllg [2006-01-20 10:19 | 96 byte(s)]
 
Re: 请教linux下写大于2G文件问题。 - lshni [2006-01-17 15:52 | 25 byte(s)]
 
Re: 请教linux下写大于2G文件问题。 - zhllg [2006-01-17 09:21 | 189 byte(s)]
 
Re: 请教linux下写大于2G文件问题。 - lshni [2006-01-17 11:03 | 251 byte(s)]
 
Re: 请教linux下写大于2G文件问题。 - zhllg [2006-01-17 12:39 | 469 byte(s)]
 
Subject: 请教linux下写大于2G文件问题。
Author: lshni    Posted: 2006-01-17 09:03    Length: 291 byte(s)
[Original] [Print] [Top]
在linux如何写大于2G的文件。我查到可以用_llseek
从man _llseek 的结果看需要两个头文件 :
#include <unistd.h>

#include <linux/unistd.h>

但是程序仍然报该函数 undeclared.
请问那位大虾指教。
[Original] [Print] [Top]
Subject: Re: 请教linux下写大于2G文件问题。
Author: zhllg    Posted: 2006-01-17 09:21    Length: 189 byte(s)
[Original] [Print] [Top]
你的manpage似乎太旧了
我这里显示需要4个头文件

不过不要用这个
除非你知道你的程序以后永远不会在Linux以外的系统上运行
因为这个_llseek是Linux特有的
----
[Original] [Print] [Top]
Subject: Re: 请教linux下写大于2G文件问题。
Author: lshni    Posted: 2006-01-17 11:03    Length: 251 byte(s)
[Original] [Print] [Top]
那能不能麻烦你讲清楚一点,用那四个头文件。或者到哪儿可以搞到最新的manpage。
还有我查到在Window平台下可以用SetFilePointer的函数可以写大文件。
从你的语气看是不是比llseek有更好的解决方案,可以解决跨平台问题。
望不吝赐教!谢谢。
[Original] [Print] [Top]
Subject: Re: 请教linux下写大于2G文件问题。
Author: zhllg    Posted: 2006-01-17 12:39    Length: 469 byte(s)
[Original] [Print] [Top]
manpage也不是越新越好
只要和你的系统匹配就好了

头文件是不够的
还要这个
_syscall5(int, _llseek, uint, fd, ulong, hi, ulong, lo, loff_t *, res, uint, wh);

Linux和Windows的跨平台不是那么简单的事情,很多时候只能靠条件编译,#if ... #else.... #endif
Linux里讲portable,一般指的是与其他*nix平台之间是否portable,比如BSD,Solaris...
对于你这个情况来说
推荐使用fseek,或者lseek, lseek64
----
[Original] [Print] [Top]
Subject: Re: 请教linux下写大于2G文件问题。
Author: Atu    Posted: 2006-01-17 14:29    Length: 1,068 byte(s)
[Original] [Print] [Top]
试试这个?

$ cat a.c
#define _LARGEFILE_SOURCE
#define _LARGEFILE64_SOURCE
#define _FILE_OFFSET_BITS 64

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

int main()
{
printf("sizeof(off_t) = %d ", sizeof(off_t));
int fd = open("test", O_WRONLY | O_CREAT | O_LARGEFILE, 0600);
if ( fd > 0 )
{
off_t l = 2047LL * 1024 * 1024 * 1024;
off_t l_new = lseek(fd, l, SEEK_SET);
write(fd, &fd, sizeof(fd));
close(fd);
}
}

$ gcc a.c -o a -std=c99
$ ./a
sizeof(off_t) = 8
$ ls -l test
-rw------- 1 root root 2197949513732 Jan 17 14:26 test


[Original] [Print] [Top]
Subject: Re: 请教linux下写大于2G文件问题。
Author: lshni    Posted: 2006-01-17 15:52    Length: 25 byte(s)
[Original] [Print] [Top]
Atu:问题解决。非常感谢!
[Original] [Print] [Top]
Subject: 题外话
Author: whone23    Posted: 2006-01-19 09:03    Length: 143 byte(s)
[Original] [Print] [Top]
$ ls -l test

-rw------- 1 root root 2197949513732 Jan 17 14:26 test

2000G的文件是在什么地方生成的啊?
[Original] [Print] [Top]
Subject: Re: 题外话
Author: Atu    Posted: 2006-01-20 08:39    Length: 386 byte(s)
[Original] [Print] [Top]
> 2000G的文件是在什么地方生成的啊?

什么地方?当然是在俺的硬盘上啦!

这里利用了ext3文件系统空洞技术,NTFS似乎也可以这么干
man lseek,专门有一段描述这个问题,但是不是很清楚,
Understand Linux Kernel 第17章讲了它的原理

不然,我怎么测试大于2G的文件操作?
俺的硬盘可没有那么大的空间了 :-(
[Original] [Print] [Top]
Subject: Re: 题外话
Author: whone23    Posted: 2006-01-20 09:31    Length: 111 byte(s)
[Original] [Print] [Top]
ext2就有这个了。

ulk中文版602页“文件的洞”解释了这个。

老兄看书真仔细:-)
[Original] [Print] [Top]
Subject: Re: 题外话
Author: zhllg    Posted: 2006-01-20 10:19    Length: 96 byte(s)
[Original] [Print] [Top]
这也是从UNIX继承的
Linux还没有的时候应该就有file hole了
APUE里有介绍
----
[Original] [Print] [Top]
Subject: Re: 题外话
Author: Atu    Posted: 2006-01-20 13:58    Length: 272 byte(s)
[Original] [Print] [Top]
晕,你都知道
“ext2就有这个了。 ”,
“ulk中文版602页“文件的洞”解释了这个。 ”,

干吗还问?却不是没事来消遣我?:-)

BTW: 我看得是电子版的,出版社只开放了该书的第17章,
正好讲了这个问题,被我看见了
[Original] [Print] [Top]
Subject: Re: 题外话
Author: whone23    Posted: 2006-01-20 14:02    Length: 173 byte(s)
[Original] [Print] [Top]
这书一直在手边上,也没怎么认真看。你一说,拿起来翻翻就找到了。

ps:更题外话
更多时候看到这么大的文件是---FAT被写坏了----出几个这样的文件。
[Original] [Print] [Top]
« Previous thread
一个通用的Makefile
C/C++编程版
20
Next thread »
PVM 例子 希望高手帮忙运行一下
     

Copyright © 2007 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
备案序号: 京ICP备05006143    webmaster: webmaster@unixresources.net
This page created on 2008-07-17 03:52:22, cost 0.064436912536621 ms.