由买买提看人间百态

topics

全部话题 - 话题: fwrite
1 (共1页)
g*********s
发帖数: 1782
1
来自主题: Programming版 - 发现自己写buffer还是能加速fwrite的
解释一下。
cbuff.dat是只用自己的buffer,关掉fwrite的。
mbuff.dat是同时用自己的也用fwrite的。
vbuff.dat是将fwrite的buffer调大。
dbuff.dat是默认的fwrite。
sbuff.dat是将fwrite的buffer设小。
g**s
发帖数: 79
2
来自主题: Linux版 - fwrite 速度慢 怎么提高啊
我用fwrite 只能达到 35MBytes/s 的速度, 但是硬盘的测试 速度有70M/s。
/dev/sda:
Timing cached reads: 1906 MB in 2.00 seconds = 953.50 MB/sec
Timing buffered disk reads: 210 MB in 3.02 seconds = 69.47 MB/sec
怎样提高写 文件的速度啊 ?
f********1
发帖数: 1601
3
来自主题: Linux版 - fwrite 速度慢 怎么提高啊
你这是用hdparm测的?
我觉得是不是hdparm测的是硬盘媒介的读写,fwrite是文件系统的读写
g*********s
发帖数: 1782
4
来自主题: Programming版 - fwrite()有参数可以优化么?
比如说调整一下缓存的大小?
有个程序,磁盘读写很费时间。报告的cpu time 30min, user time 2.5hr,就是说80
%时间花到IO上了。查了一下,就是用fwrite写不同大小的记录到磁盘上。
g*********s
发帖数: 1782
5
来自主题: Programming版 - fread/fwrite有big/small endian问题吗?
For example:
big endian machine,fwrite(&x, sizeof(int), 1, output).
small endian machine, fread(&y, sizeof(int), 1, input).
Here input and output point to the same file.
Will fread/write transparently handle this issue?
l***i
发帖数: 1309
6
来自主题: Programming版 - fread/fwrite有big/small endian问题吗?
Here is one way to handle it.
#include
#include
#include
size_t write_uint32_to_file( FILE* file, uint32_t nbr )
{
nbr = htonl( nbr ); // Host to network long
return fwrite( file, &nbr, 4, 1 );
}
size_t read_uint32_from_file( FILE* file, uint32_t* nbr )
{
size_t res = fread( file, nbr, 4, 1 );
*nbr = ntohl( *nbr ); // Network to host long
return res;
}
g*********s
发帖数: 1782
7
来自主题: Programming版 - 发现自己写buffer还是能加速fwrite的
#include
#include
int main() {
const int count = 1024*1024*128;
const int buffSz = 1024*128;
FILE* output = fopen("cbuff.dat", "w");
setvbuf(output, NULL, _IONBF, 1024*128);
for (int i = 0; i < count; i++) {
//int x = i;
int buffer[buffSz];
buffer[i%buffSz] = i;
if ((i+1)%(buffSz) == 0)
fwrite(buffer, sizeof(int), buffSz, output);
}
fclose(output);
}
#include
#include
int main() {
co
n*******k
发帖数: 100
8
来自主题: JobHunting版 - 请教一下external sorting的问题
就老老实实的取2个文件f1,f2(比如整数)的头元素放在变量v1,v2里面,较小的值
写入磁盘结果文件,(判断读完与否,feof() )
while(f1未读完且f2也未读完)
如果v1 <= v2, fwrite(&v1,4Byte,1,res_file),从f1读取下一个数;
否则fwrite(&v2,4Byte,1,res_file),从f2读取下一个数。
if (f1读完,f2没被读完)
flush f2剩余元素进入res_file
if (f2读完,f1没被读完)
flush f1剩余元素进入res_file
这样不就行了吗?
fread/fwrite可以利用文件缓冲区。如果自己想偷懒,不想切文件,定义和管理文件缓
冲区,直
接这样用就可以了。出来的文件就是globally sorted。
w****x
发帖数: 2483
9
来自主题: JobHunting版 - 发一个刚面的startup面经
直接贴Google doc了
Given a word, print out all the combinations of words from the letters that
make it. For example:
bad: abd adb bda dab dba
void _inner_print(char str[], int len, int pos)
{
if (pos == len)
{
cout< return;
}
for (int i = pos; i < len; i++)
{
swap(str[pos], str[i]);
_inner_print(str, len, pos+1);
swap(str[pos], str[i]);
}
}
Input: bad
step 1: 3, i = 0 - bad
step 2.: 3, i = 1 - abd
step 2.: 3, i = 2 - dabchar
void... 阅读全帖
W*W
发帖数: 293
10
来自主题: Programming版 - c的文件写入问题
怎么用fwrite写入一个整型数组?我写出来是乱麻。用fprintf可以写入,用fwrite写
字符数组也可以。
W***o
发帖数: 6519
11
来自主题: Programming版 - serialization 到底该怎么理解啊?
最近可能需要写一个serialization/deserialization的code, 是要把一个C里面的
struct保存信息,然后远程传输,再deserialization,运行。比如我的struct是这样:
typedef struct my_data {
char *data;
int *user_array;
int written_by;
int user_array_size;
} my_data;
上面的user_array这个field是一个动态数组,data这个field要保存大量的字符串。请
教一下,该如何serialize/deserialize? 是不是需要用 fopen, fwrite 之类的把 数
据写到一个file里面,利用指针控制fwrite()的位置?
谢谢指教
x******a
发帖数: 6336
12
来自主题: Programming版 - C++ problem
I got thousands problems on the following piece of code "dumpfile.h" when I
compile under cygwin. it is ok under visual stduio... can anyone help?
Thanks!
#include
#include
#include //ostream_iterator
#include //cerr
#include //std::copy
template
void dump_to_file(const char* filename, const std::vector& v_d){
std::ofstream ofs(filename);
if(!ofs){
std::cerr<<"Unable to open the file to write!n";
return ;... 阅读全帖
w***o
发帖数: 2969
13
来自主题: ebiz版 - 严重警告某些ebizship用户
今天 ebizship down le ?
Warning: mkdir() [function.mkdir]: Permission denied in /home/websites/
ebizship/backend/cron/Shipper.php on line 685
Warning: fopen(/home/websites/ebizship/wwwroot/labels/92/20100412/Sanyo
Xacti VPC-CA9 Waterproof Camera Camcorder Black-Quantity 1-MA-01007-
922288110226548-1271086116-81cda633084770efed52d95c70c12163.pdf) [function.
fopen]: failed to open stream: No such file or directory in /home/websites/
ebizship/backend/cron/Shipper.php on line 715
Warning: fwrite(): su
y***u
发帖数: 5243
14
printf,fread,fwrite在哪个平台是不一样的?
y***u
发帖数: 5243
15
EE毕业,做信号处理,虽然主要做软件。我是说,一个代码里面,只包含printf,fread
,fwrite我需要写什么平台相关代码?我只做信号处理
z*y
发帖数: 1311
16
来自主题: ComputerGraphics版 - JPEG2000 Question
Thanks, but not work very well.
I use C.
Here is the code I generate data.
FILE *f_out = fopen("LL.dat", "wb");
fwrite(LL, sizeof(short int), 256*256, f_out);
fclose(f_out);
Then I try Matlab.
f = fopen('LL.dat', 'rb');
d = fread(f, [256,256], 'int16');
imwrite(d, 'LL.jpg', 'jpg', 'BitDepth', 16, 'Mode', 'lossless');
imwrite(d, 'LL.png', 'png', 'BitDepth', 16);
The image is not right. BTW, data LL is correct.
I verify using other ways.
Thank you for the help.
p*****d
发帖数: 81
17
首先我的经验是在win7上,也许xp上并不适用,仅供你参考。
* hardware: If my memory serves me, there were some SSDs "claiming" to have
sustained rate >300MB/s last year. You can compare the claimed speeds at: http://www.newegg.com/Store/SubCategory.aspx?SubCategory=636
For us, we want 1.1GB/s so single disk is not an option and we have to use
raid.
If you want to use rotational disks, you definitely need raid.
Try windows's software raid first. If it doesn't work for you, you can use
hardware raid or hardware+softwar... 阅读全帖
q*****z
发帖数: 191
18
Hi,
I am new to .net but have used c for years. I met a problem recently using .
net C++. What I want to do is to use openFileDialog() to open a file and
write some binary information to it. Here is what I have:
SaveFileDialog^ d = gcnew SaveFileDialog;
d->Filter = "exp files (*.exp)|*.exp";
if (d->ShowDialog() == System::Windows::Forms::DialogResult::OK)
{
FILE *fid;
fopen(fid,d->FileName,'wb+');
fwrite(buf,1,frameSize,fid);
fclose(fid);
}
It seems like d->Filename does't return the standard st
S*A
发帖数: 7142
19
来自主题: Linux版 - fwrite 速度慢 怎么提高啊
how do you run your bench mark test?
what file system is this?
You can't compare disk read and disk write.
I think that is the normal speed for disk write.
My disk is not much faster than yours.
g**s
发帖数: 79
20
来自主题: Linux版 - fwrite 速度慢 怎么提高啊
是的 用hdparm测的,
怎样提高这个文件系统的读写速度呢 ?
S*A
发帖数: 7142
21
来自主题: Linux版 - fwrite 速度慢 怎么提高啊
文件系统有 meta data 的读写,自然是要比写 raw device
要慢些。
S*A
发帖数: 7142
22
来自主题: Linux版 - fwrite 速度慢 怎么提高啊
好吧,我有一部样机比你的快很多,哈哈。
Timing buffered disk reads: 792 MB in 3.01 seconds = 263.39 MB/sec
Timing cached reads: 23030 MB in 2.00 seconds = 11538.61 MB/sec
g**s
发帖数: 79
23
来自主题: Linux版 - fwrite 速度慢 怎么提高啊
你的机器什么配置,咋这么快呢 ?
S*A
发帖数: 7142
24
来自主题: Linux版 - fwrite 速度慢 怎么提高啊
Intel SSD.
当然 CPU 也很快就是了。
s****a
发帖数: 6521
25
来自主题: Linux版 - PHP无法写文件的问题
各位
我在Ubuntu下装的apache2+php
其中一个php脚本里用exec运行一个R脚本,产生一个图。
结果现在这个php脚本通过网页运行的时候无法产生图,而直接在terminal里运行这个
php脚本却可以产生。
请问这可能是什么原因呢?
我查看了R脚本写入的文件夹,权限已经特意设成了777,用户也改成了www-data
但就是没法产生文件。
而其他php脚本用fwrite来直接产生的文本文件却可以生成。
谁知道这可能是什么原因呢?
w***g
发帖数: 5958
26
来自主题: Programming版 - size不固定的struct怎么定义呀?
struct Numbers {
size_t N;
float data[1]; /* 有的编译器要求数组长度至少为1 */
};
写的时候先把N写进去,然后fwrite(xx.data, sizeof(float), xx.N, file);
读的时候先把N读出来,然后
xx = (struct Numbers *)malloc(sizeof(struct Numbers) + (N-1) * sizeof(float)
);
然后xx里的data就可以当N个元素的素组用了。
b*********n
发帖数: 1258
27
来自主题: Programming版 - 怎么将linked list 存储到文件中去呀
用fwrite吗?
然后怎么去读去呀?
k*o
发帖数: 46
28
来自主题: Programming版 - a question about CGI
write a CGI to test Transfer-Encoding:chunked
but when I use printf or fwrite to output 0xA,
I will actually get 0xD 0xA.
how to avoid this situcation?
for example, my data is 0xA 0x1 0x2.
i hope the client gets 0xA 0x1 0x2 instead of 0xD 0xA 0x1 0x2.
thanks.
J*******3
发帖数: 1651
29
在用c写程序时,很多时候需要存储一些简单的数据,如果为此而用mysql数据库就有些
大才小用了,可以把这些数据以结构的形写入文件,然后再需要时读取文件,取出数据。
如下是定义函数的源文件和头文件:
源文件struct.c:
#include "struct.h"
//第一个参数是要写入的文件名,第二个参数是缓冲区,第三个参数是缓冲区大小,
第四个参数是打开文件流的形态,返回TRUE表示写入成功,返回FALSE表示写入失败
int writeStruct(const char *fileName,char *buffer,int bufferLen,char *mode){
int ret;
FILE *fileID = NULL;
fileID = fopen(fileName,mode);
if (fileID == NULL){
perror("fopen");
goto writeEnd;
}
rewind(fileID);
ret = fwrite(buffer,bufferLen,1,fi
s********z
发帖数: 5411
30
来自主题: Programming版 - 求助:关于指针和数据存储
大家好,
我在想办法一些图像从camera写到内存,最后再存到硬盘里。
我刚开始学,很多地方不太懂,请大家帮帮忙。
我的思路大概就是,先申请存储一幅图像的内存(指针pic12),再申请存储所有1000幅
图像的内存(指针picAll). 然后让pic12指向picAll的起点。 接着开始采集图像,每采
集到一幅图像就用pic12写到picAll里面,然后pic12再向下移动一个frame. 采集完所
有图像以后,再全部用fwrite写到硬盘里。
关于指针,我不知道我用 pic12=(word *)GlobalAlloc(GPTR,2*iXRes*iYRes)) 分配内
存以后,再用pic12++的话,指针会不会移动一个frame(2*iXRes*iYRes bytes)?
另外,一次用 GlobalAlloc 申请357M的内存不知道会不会有问题, 我用的系统是XP
professional,机器装了4G的内存。
这样做行不行。 大家帮忙看看,感激不尽!
int NumFrames=100; //Number of all frames
FILE *fp;
if( (fopen_s(&
s********z
发帖数: 5411
31
来自主题: Programming版 - 求助:关于文件夹和文件的读写
我现在想创建一个新的文件夹,然后将一个文件用fopen_s和fwrite写道那个文件夹。
我知道用mkdir创建文件夹,但是如改变fopen_s的文件夹呢?
另外如何检查是否某个文件夹已经存在呢? 如何检查某个文件是否存在呢?
谢谢啦!
s***e
发帖数: 122
32
来自主题: Programming版 - ask a question about struct in C programming
看来是因为这一句:
fread(&sacbin, sizeof(header), 1, fpr);
要改成
fread(&sacbin, sizeof(struct header), 1, fpr);
如果你是用C编译器的话。
当然你也可以定义struct header为typedef struct header {...} HEADER; 那样你就可以用sizeof(HEADER)了。
下面这段代码是可以编译运行的。
#include
struct header {
int hd;
};
struct sac
{
struct header hdr;
float * data;
};
void test2() {
const char * const fn = "test2.txt";
FILE* fpw = fopen(fn, "w");
struct header hdr;
hdr.hd = 18;
fwrite(&hdr, sizeof(hdr), 1, fpw);
fclose(fpw
z****u
发帖数: 185
33
来自主题: Programming版 - a linux disk IO question (转载)
【 以下文字转载自 Linux 讨论区 】
发信人: zouzou (zouzou), 信区: Linux
标 题: a linux disk IO question
发信站: BBS 未名空间站 (Tue Jul 29 02:11:58 2008)
I need to reorganize a large amount of data (~9.5G, 500 files) stored in
disk.
So I do
foreach( file )
{
fread( file );
reorganize;
fwrite( file );
};
What surprises me is that it takes too long to do this simple thing. One
timing result shows
read: 4761second (time cost for fread)
k**f
发帖数: 372
34
Integers and floating point numbers are all represented inside the memory in binary form. If you write to a text file, some kind of conversion is always needed, even for integers.
You can write the internal binary representation directly to a file with C function fwrite() and read them back with function fread().
If the binary file are used in different hardware platforms, you need also to understand the order of bytes for a multi-byte value, also know as the "endian" issue, too.
i**p
发帖数: 8
35
来自主题: Programming版 - php写文件的奇怪错误
代码这样:
if (is_writable("test.txt"))
{
echo "writeable";
$file = fopen("test.txt","w");
echo fwrite($file,"Hello World. Testing!");
fclose($file);
}
else
{
echo "we cannot write";
}
?>
结果是:
writable0
文件为何没有写入呢?硬盘上文件已经创建成功,大小为0。
g*********s
发帖数: 1782
36
来自主题: Programming版 - 一个popen加gzip的问题
FILE *fp = popen(gzip_file(fileName), "w");
...
gzip_file是这样定义的:
const char* gzip_file(const char* file_name)
{
static sda::string cmd;
cmd = _gzip_path + sda::string(" > ") + sda::string(file_name);
return cmd.c_str();
}
现在传进的参数文件名比较怪异,带空格的,比如"abc def.gz"。这样gzip command变
成了:gzip >abc def.gz。然后gzip报错:gzip: def.gz: No such file or
directory。但是abc文件还是生成了,而且文件指针也返回了。问题在于abc这个文件
根本无法写入,所以后面又出现了fwrite error。
有什么办法第一时间抓住这个gzip错误呢?不许用parser提前分析文件名。
b***y
发帖数: 2799
37
☆─────────────────────────────────────☆
gladioli (gladioli) 于 (Wed Sep 14 10:56:23 2005) 提到:
这是个奇怪的问题,我用的其实是标准C,在linux下运行正常,可是拿到windows上的
visual c++上运行问题就出来了。首先我是用unsigned char和fread来读二进制图形文件
的的,一个8位二进制算做一个unsigned char, 读了几行后就开始乱码,应该是内容读错
了。查了一下,sizeof(unsigned char)=1,不明白为什么会出错。
还有用fwrite写图形文件,有的时候也会出错。好像每一行都会错几格。可是如果将写入
值限制在25以上,好像错误就会少一些。
非常的困惑。有没有有经验的指点一下?多谢!
☆─────────────────────────────────────☆
rebatezhq (test) 于 (Wed Sep 14 19:48:06 2005) 提到:
fopen()的时候用binary模式,如"rb", "wb"
p***o
发帖数: 1252
38
来自主题: Programming版 - fwrite()有参数可以优化么?
setvbuf

80
g*********s
发帖数: 1782
39
来自主题: Programming版 - fwrite()有参数可以优化么?
fopen默认的buffer size多大?
g*********i
发帖数: 89
40
来自主题: Programming版 - fwrite()有参数可以优化么?

BUFSIZ
defined in stdio.h
t****t
发帖数: 6806
41
来自主题: Programming版 - fread/fwrite有big/small endian问题吗?
of course not. you need to handle it.
b******n
发帖数: 592
42
来自主题: Programming版 - fread/fwrite有big/small endian问题吗?
no, it won't. you need to handle it correctly
i*****f
发帖数: 578
43
来自主题: Programming版 - fread/fwrite有big/small endian问题吗?
GNU libc has an socket API handles this because tcp packet and x86 machine
uses different endians. I remember it is ntol() or lton().
g*********s
发帖数: 1782
44
来自主题: Programming版 - 发现自己写buffer还是能加速fwrite的
五个写文件程序的实验结果,快10%。源程序在二楼。
mbuff.out
real 0m44.698s
user 0m0.660s
sys 0m10.105s
cbuff.out
real 0m45.470s
user 0m0.744s
sys 0m10.977s
dbuff.out
real 0m50.698s
user 0m1.332s
sys 0m15.377s
sbuff.out
real 0m50.711s
user 0m1.136s
sys 0m15.989s
vbuff.out
real 0m51.923s
user 0m1.952s
sys 0m16.713s
c****e
发帖数: 1453
45
来自主题: Programming版 - 发现自己写buffer还是能加速fwrite的
If you want to fast and reliable output to hard disk, use memory mapped file
.
m*****e
发帖数: 4193
46

fprintf (or fwrite) buffers data in memory and only when it's full it does a
real write to the file.
sleep() doesn't matter. It's just with a sleep() the code runs much more
slowly so your buffer doesn't get full in time for you to notice.
You can add a fflush(fp) or better, let it be. Just remember to do a fclose(
) when you are done.
X****r
发帖数: 3557
47
First, popen creates a new process, not just a new thread.
Second, delay exiting of the child process that reads from
the pipe just masks the underlying problem. What do you do
with these extra data you read in after you're supposed to
exit? If you're going to ignore them, then the parent process
that writes to the pipe should just ignore SIGPIPE and handle
the error in fwrite/fprintf/etc. properly.
w***g
发帖数: 5958
48
来自主题: Programming版 - C++ ofstream binary output slow
怎么搞就只能搞到30MB/s的速度。7200RPM的硬盘,裸写应该可以达到100MB/s。用stra
ce发现底层是用writev实现的,每次只写8KB多一点。即使用了rdbuf()->pubsetbuf也不
行。改成FILE和fwrite后,默认也是每次写8KB多一点(BUFSIZ=8KB),但是setvbuf后就
可以buffer任意大了。这次本牛也搞不定了,希望版上的大牛们给支援一下。
l**********n
发帖数: 8443
49
来自主题: Programming版 - feof always return true
why?
I am reading a binary file from a sftp resource.
while (!feof($file)) {
$content = fread($file, 1024 * 10);
$bytes_read = strlen($content);
if($bytes_read == 0) break;
print_r("read bytes: ".$bytes_read."n");
fwrite($newfile, $content, 1024 * 10);
}
if I leave out the $bytes_read, it becomes an infinite loop.
W***o
发帖数: 6519
50
来自主题: Programming版 - serialization 到底该怎么理解啊?
开始有点眉目了。
用fwrite 写 binary
然后用fread 读,根据数字判断读入的长度,再在memory里复原struct
谢谢指点!
1 (共1页)