QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1315|回复: 15

哪里出问题?

[复制链接]
发表于 2004-11-7 10:48:59 | 显示全部楼层 |阅读模式
想要实现创建一个文件test。dat,并从终端输入若干字符串写入文件,直至“quit“结束。
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>

#define NEWFILE(O_WRONLYIO_CREATIO_TRUNC)
#define SIZE 80

int write_buffer(int fd, const void *buf, int count);

int main(void)
{
    int outfile;
    char filename[]={"test.dat"};
         char buffer[SIZE];

         if (outfile=open(filename,NEWFILE,0640)==-1)
             {
               printf("ERROR,OPEN FILE FAILED!\n");
               exit(255);
             }
          while(!strcmp(buf, "quit"))
         {
            gets(buffer);
            if (write_buffer(outfile,buffer,SIZE)==-1)
              {
                printf("ERROR,WRITE FAILED:\n", sys_errlist[errno]);
                exit(255);
             }
          }
         close(outfile);
         return 0;
    }

int my_write(int fd, char *buf, size_t count)
{
            int i,n;
       for(i=0;i<count;++i)
       {
             write_buf[write_offset++]=*buf++;
             if (write_offset==BUFSIZE)
            {
                     write_offset=0;
                     n= write( fd,write_buf,sizeof(write_buf));
           
             if (n!=BUFSIZE)
                return -1;
           }
          }
            return -1;
}

提示:
test1.c: In function `main':
test1.c:21: error: `NEWFILE' undeclared (first use in this function)
test1.c:21: error: (Each undeclared identifier is reported only once
test1.c:21: error: for each function it appears in.)
test1.c:26: error: `buf' undeclared (first use in this function)
test1.c: In function `my_write':
test1.c:44: error: `write_buf' undeclared (first use in this function)
test1.c:44: error: `write_offset' undeclared (first use in this function)
test1.c:45: error: `BUFSIZE' undeclared (first use in this function)
发表于 2004-11-7 11:39:09 | 显示全部楼层
出错信息说得比较明确,楼主再看看,改改啊。
回复

使用道具 举报

 楼主| 发表于 2004-11-7 11:47:20 | 显示全部楼层
那个 NEWFILE的问题,不这么写 ?那怎么写?
回复

使用道具 举报

发表于 2004-11-7 13:04:39 | 显示全部楼层
你想表示什么意思?你的那个宏是什么意思?
回复

使用道具 举报

 楼主| 发表于 2004-11-7 15:58:59 | 显示全部楼层
#define NEWFILE( O_WRONLY| O_CREAT|O_TRUNC)
是希望实现(以只写方式打开文件| 若打开文件不存在则创建此文件| 若以只写或只读方式打开一个已存在的文件时,则将它截至0)
回复

使用道具 举报

发表于 2004-11-7 16:01:58 | 显示全部楼层
加个空格。
回复

使用道具 举报

 楼主| 发表于 2004-11-7 16:26:53 | 显示全部楼层
还是有问题
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>

#define NEWFILE(O_WRONLY O_CREAT O_TRUNC)
#define BUFSIZE 1024
#define SIZE 80

int write_buffer(int fd, const void *buf, int count);

int main(void)
{
    int outfile;

    char filename[]={"test.dat"};
         char buffer[SIZE];

         if (outfile=open(filename,NEWFILE,0640)=-1)
             {
               printf("ERROR,OPEN FILE FAILED!\n");
               exit(255);
             }
          while(!strcmp(buffer, "quit"))
         {
            gets(buffer);
            if (write_buffer(outfile,buffer,SIZE)==-1)
              {
                printf("ERROR,WRITE FAILED:\n", sys_errlist[errno]);
                exit(255);
             }
          }
         close(outfile);
         return 0;
    }

int my_write(int fd, char *buf, size_t count)
{
            int i,n,write_offset;  write_offset=0;
       for(i=0;i<count;++i)
       {
           
                write_buffer[write_offset++]=*buf++;
             if (write_offset==BUFSIZE)
            {
                    write_offset=0;
                    n= write( fd,write_buffer,sizeof(write_buffer));
           
             if (n!=BUFSIZE)
                return -1;
           }
          }
            return -1;
}
提示:
test1.c:10:26: macro parameters must be comma-separated
test1.c: In function `main':
test1.c:23: error: `NEWFILE' undeclared (first use in this function)
test1.c:23: error: (Each undeclared identifier is reported only once
test1.c:23: error: for each function it appears in.)
test1.c:23: error: invalid lvalue in assignment
test1.c: In function `my_write':
test1.c:47: error: subscripted value is neither array nor pointer
回复

使用道具 举报

发表于 2004-11-7 17:03:38 | 显示全部楼层
不是在那儿加,在NEWFILE与后面的语句之间。
回复

使用道具 举报

 楼主| 发表于 2004-11-7 17:18:31 | 显示全部楼层
不好意思出丑了
但还有点问题
test1.c: In function `main':
test1.c:23: error: invalid lvalue in assignment
test1.c: In function `my_write':
test1.c:47: error: subscripted value is neither array nor pointer
回复

使用道具 举报

 楼主| 发表于 2004-11-7 20:08:04 | 显示全部楼层
哪位大侠,出手解决一下这个问题,谢了
回复

使用道具 举报

发表于 2004-11-8 09:14:17 | 显示全部楼层
#define NEWFILE (O_WRONLY O_CREAT O_TRUNC)
......
......
if (outfile=open(filename,NEWFILE,0640)=-1)
..........
..........
main.c:21: `O_WRONLYIO_CREATIO_TRUNC' undeclared (first use in this function)
会不会少了个头文件啊?
回复

使用道具 举报

发表于 2004-11-8 16:35:16 | 显示全部楼层
应该用 | 分开,而不是i。
回复

使用道具 举报

发表于 2004-11-8 17:23:22 | 显示全部楼层
老大,你的NEWFILE 的定义应该用或运算的,是 | 而不是 i ,用+好象也可以吧
回复

使用道具 举报

发表于 2004-11-8 18:24:56 | 显示全部楼层
lvalue是什么意思啊?
回复

使用道具 举报

发表于 2004-11-8 18:48:09 | 显示全部楼层
[quote:730b812f60="hobby!"]lvalue是什么意思啊?[/quote]
左值变量
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-7 03:31 , Processed in 0.059512 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表