当前位置: 技术问答>linux和unix
有关文件描述符的操作
来源: 互联网 发布时间:2016-08-30
本文导语: 小弟最近在试着存一些数据到硬盘里,于是用了以下的代码: FILE *fp[3] ={0}; While(1) { 获取src->enc_dev[i+1]->out_virt_buffer的数据; for(i=0; ienc_dev[i+1]->out_virt_buffer,1,ret[i],fp[i]); if(length!=ret[i]) { perror("write errorn"); }...
小弟最近在试着存一些数据到硬盘里,于是用了以下的代码:
代码如上所示,原本的意思是先判断fp是否为空,如果是空的就打开文件,这样只要打开一次就可以了.问题出在第一次while循环好之后,当进行第二个while循环的时候,在for循环里当打印第五个111111 的时候报错了. 我试着把src->enc_dev[i+1]->out_virt_buffer 换成一个固定的"xxxx"字符串写进去的时候还是一样的结果,但是只要我把上面说明的那句判断注释掉就正常了。.. 这是为什么呢? 我怀疑是fp 在后续的操作中被修改了,但是不知道怎么判断fp有没有被修改,高手知道怎么查看fp里的内容吗?检查下fwrite前是不是还是原来的那个fp,我试过用%x %d 打印,结果都是一样的... 还有什么招吗 谢谢
FILE *fp[3] ={0};
While(1)
{
获取src->enc_dev[i+1]->out_virt_buffer的数据;
for(i=0; ienc_dev[i+1]->out_virt_buffer,1,ret[i],fp[i]);
if(length!=ret[i])
{
perror("write errorn");
}
}
}
代码如上所示,原本的意思是先判断fp是否为空,如果是空的就打开文件,这样只要打开一次就可以了.问题出在第一次while循环好之后,当进行第二个while循环的时候,在for循环里当打印第五个111111 的时候报错了. 我试着把src->enc_dev[i+1]->out_virt_buffer 换成一个固定的"xxxx"字符串写进去的时候还是一样的结果,但是只要我把上面说明的那句判断注释掉就正常了。.. 这是为什么呢? 我怀疑是fp 在后续的操作中被修改了,但是不知道怎么判断fp有没有被修改,高手知道怎么查看fp里的内容吗?检查下fwrite前是不是还是原来的那个fp,我试过用%x %d 打印,结果都是一样的... 还有什么招吗 谢谢
|
如果fp的值没变的话,就应该不是文件描述符的问题.看的你程序似乎还是多线程的?建议从线程同步和指针操作找找问题
|
fp是文件指针 就是一个地址吧
|
这段代码没看出有什么问题,while里应该还干了别的不,不然while是干嘛的,另外FILE是标准IO,不是UNIX的fd