首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

fwrite的4个参数到底是什么意思!该怎么处理

2012-03-13 
fwrite的4个参数到底是什么意思!!!现在我有一个回调函数,用来接收服务器发送过来的实时视频流。void __stdc

fwrite的4个参数到底是什么意思!!!
现在我有一个回调函数,用来接收服务器发送过来的实时视频流。
void __stdcall RawFrame(unsigned long _ulID,unsigned char* _ucData,int _iSize)
第二个参数是视频数据,第三个参数是视频数据长度。

现在我要用fwrite把视频流保存成文件,比如abc.rmvb,那么这4个参数该怎么填????

C/C++ code
pFile = fopen("abc.rmvb", "w");//在外部创建一个文件    回调中:fwrite(???, ???,  ???, pFile); //这前三个参数怎么填???    fseek(pTdDlg->pFile, 0, SEEK_SET);


===============

还有就是因为回调时系统每次自动调用,所以 fclose(pFile); 这句代码貌似不能放在里面,那该放在什么地方呢???


[解决办法]
这个问题你首先应该先msdn,再谷歌+百度,最后才csdn。
size_t fwrite(const void* buffer,size_t size,size_t count,FILE* stream);   
注意:这个函数以二进制形式对文件进行操作,不局限于文本文件   
返回值:返回实际写入的数据块数目   
(1)buffer:是一个指针,对fwrite来说,是要输出数据的地址。   
(2)size:要写入内容的单字节数;   
(3)count:要进行写入size字节的数据项的个数;   
(4)stream:目标文件指针。   
(5)返回实际写入的数据项个数count   
说明:写入到文件的哪里? 这个与文件的打开模式有关,如果是w+,则是从file pointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变,stream的位置移动count个数;如果是a+,则从文件的末尾开始添加,文件长度加大,而且是fseek函数对此函数没有作用。

至于fclose要看你的整体的程序结构。
[解决办法]
fwrite(_ucData, 1, _iSize, pFile);
[解决办法]
C/C++ code
size_t fwrite(              const void *buffer,//指向要写入数据的指针              size_t size,//写入数据的个数(就是你要写入几个,一个为1)              size_t count,//写入数据的大小              FILE *stream //要写入文件的指针fopen所打开的指针);//也帮你注明一下吧
[解决办法]
fwrite(_ucData, 1, _iSize, pFile);
fwrite就是这么用的,问题是你fopen的时候要以二进制打开,应该是"wb",而不是"w"
[解决办法]
size 是写入数据item的长度
count是写入的次数

所以 fwrite(buf,1024,1,fp) 和 fwrite(buf,1,1024,fp) 效果上等价




[解决办法]
探讨

引用:
fwrite(_ucData, 1, _iSize, pFile);


这样貌似不行,_ucData是每次传输过来的数据,_iSize是每次传输过来数据的长度。

还有2楼的,别随便从百度抄一段就糊弄观众,MSDN力求简洁,有时候根本解释不清!

size:要写入内容的单字节数; //什么是单字节数? _ucData还是_iSiz……

[解决办法]
我之所以直接拷贝百度的东西,是因为我认为它解释的已经很清楚了,其实它就是把msdn的解释翻译

成汉语。
其实我以前和你一样对一些术语或近似术语的解释很难理解,这需要一个积累,而这个积累也是必须

的。以后你看到的大多数文档都是这种解释,还未必有现成的汉语翻译。
至于size和count这两个参数,我可以再给你解释下:
1)
const char *pszText = "hello world!";
fwrite(pszText, strlen(pszText), 1, file); //这里把整个字符串作为整体,size就是这个字符串
所占用的字节数,conut就是字符串的数量
fwrite(pszText, sizeof(char), strlen(pszText), file); //这里把pszText看做字符数组,即写入内容为字符,size就是每个字符占用的字节数,count为写入的数量,这2种用法效果是一样的。

2)
int array[10] = {0};
fwrite(array, sizeof(int), 10, file); //写入内容为int数据,数量为10

3)
struct Point
{
double x;
double y;
};
Point *pt = new Point();
fwrite(pt, sizeof(*pt), 1, file); //写入内容为Point实例,数量为1
delete pt;

还不理解的话,爱莫能助了。
[解决办法]
不要把
fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待

fopen("...","...b");fread,fwrite,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待
弄混了

查MSDN是Windows程序员必须掌握的技能之一:

Writes data to a stream.

 
size_t fwrite(
const void *buffer,
size_t size,
size_t count,
FILE *stream 
);
 

Parameters


buffer
Pointer to data to be written.

size
Item size in bytes.

count
Maximum number of items to be written.

stream
Pointer to FILE structure.

Return Value
fwrite returns the number of full items actually written, which may be less than count if an error occurs. Also, if an error occurs, the file-position indicator cannot be determined. If either stream or buffer is a null pointer, the function invokes the invalid parameter handler, as described in Parameter Validation. If execution is allowed to continue, this function sets errno to EINVAL and returns 0.

Remarks
The fwrite function writes up to count items, of size length each, from buffer to the output stream. The file pointer associated with stream (if there is one) is incremented by the number of bytes actually written. If stream is opened in text mode, each carriage return is replaced with a carriage-return – linefeed pair. The replacement has no effect on the return value.

This function locks the calling thread and is therefore thread-safe. For a non-locking version, see _fwrite_nolock.

[解决办法]
这个问题你首先应该先msdn,再谷歌+百度,最后才csdn。
size_t fwrite(const void* buffer,size_t size,size_t count,FILE* stream);   
注意:这个函数以二进制形式对文件进行操作,不局限于文本文件   
返回值:返回实际写入的数据块数目   
(1)buffer:是一个指针,对fwrite来说,是要输出数据的地址。   
(2)size:要写入内容的单字节数;   
(3)count:要进行写入size字节的数据项的个数;   
(4)stream:目标文件指针。   
(5)返回实际写入的数据项个数count   
说明:写入到文件的哪里? 这个与文件的打开模式有关,如果是w+,则是从file pointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变,stream的位置移动count个数;如果是a+,则从文件的末尾开始添加,文件长度加大,而且是fseek函数对此函数没有作用。

至于fclose要看你的整体的程序结构。

热点排行