免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5848 | 回复: 15
打印 上一主题 下一主题

[C] write函数出错,请高手看一下 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-15 10:55 |只看该作者 |倒序浏览
写如下测试代码:

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

#define STD_INPUT 0
#define STD_OUTPUT 1
#define STD_ERROR 2

#define WRITE_TEST

int main(int argc,char* argv[])
{
       
        writeFile();
        exit(0);
}

#ifdef WRITE_TEST
int writeFile()
{
        FILE *fp;
        int fd;
        char buffer[15];
        //unlink("text.txt");
        fd = open("text.txt",O_RDWR|O_CREAT,S_IWUSR);
        if(fd == -1)
                printf("create file fail!\n");

        if(write(fd,"write text!\n",15) != 15)
        {
                        write(STD_ERROR,"a write error happend!\n",sizeof("a write error happend!\n"));
        }

        read(fd,buffer,15);
        write(STD_OUTPUT,buffer,15);

        return 1;       
}
#endif

最后执行,输出为乱码。不知原因为何,请高手解惑。

论坛徽章:
0
2 [报告]
发表于 2009-03-15 18:50 |只看该作者
可以检查一下你的buffer是不是以"\0"结束

论坛徽章:
0
3 [报告]
发表于 2009-03-15 18:59 |只看该作者
原帖由 wpdzyx 于 2009-3-15 10:55 发表
写如下测试代码:

#include
#include
#include
#include
#include
#include
#include

#define STD_INPUT 0
#define STD_OUTPUT 1
#define STD_ERROR 2

#define WRITE_TEST

int main ...




write 完了后, fd指向的应该是文件末端, 你从这个位置读取 15字节,未知结果.

[ 本帖最后由 yulc 于 2009-3-15 19:01 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2009-03-15 21:47 |只看该作者
if(write(fd,"write text!\n",15) != 15)
你这句不应该写 =15,因为你写进去的字符不是15.所以会出错。
去掉再试试吧。

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:09IT运维版块每日发帖之星
日期:2015-09-14 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-16 16:34:21
5 [报告]
发表于 2009-03-16 15:38 |只看该作者
头文件乱写,多余的宏定义,main的参数应该是void, fd fail了还不退出。。。

论坛徽章:
0
6 [报告]
发表于 2009-03-16 15:47 |只看该作者
原帖由 yulc 于 2009-3-15 18:59 发表




write 完了后, fd指向的应该是文件末端, 你从这个位置读取 15字节,未知结果.

到达文件尾,read直接返回,buffer数组内容不变

read之前先seek到文件头,或者向前seek 15个字节

论坛徽章:
0
7 [报告]
发表于 2009-03-16 20:52 |只看该作者

回复 #1 wpdzyx 的帖子

弄了半天,终于找到答案了。

正如

[ 本帖最后由 yin_ch 于 2009-3-17 20:04 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2009-03-17 19:33 |只看该作者

回复 #1 wpdzyx 的帖子

弄错了

[ 本帖最后由 yin_ch 于 2009-3-17 20:03 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2009-03-17 20:07 |只看该作者
原帖由 雨过白鹭洲 于 2009-3-16 15:47 发表

到达文件尾,read直接返回,buffer数组内容不变

read之前先seek到文件头,或者向前seek 15个字节



果然加上lseek(fd,-13,SEEK_CUR);之后,就对了,
lseek的用法   http://cpp.ga-la.com/html/18/19/0603/133.htm

论坛徽章:
0
10 [报告]
发表于 2009-03-17 20:55 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP