-1

我编写了以下代码来模拟write(). C程序执行没有错误,但新内容未写入myfile.

问题是什么?

#include<stdio.h>

int main(int ac, char* av[])
{
    int fd;
    int i = 1;
    char *sep = "";

    if(ac < 1)
    {
        printf("Insuff arguments\n");
        exit(1);
    }
    if((fd = open("myfile", 0660)) == -1)
    {
        printf("Cannot open file");
        exit(1);
    }
    while(i<ac)
    {
        write(fd, av[i], strlen(av[i]));
        write(fd, sep, strlen(sep));
        i++;
    }
    close (fd);
}
4

2 回答 2

3

您应该检查 write 的返回值并查看 perror 发生了什么(例如),

无论如何,您没有以正确的方式调用 open

尝试

  if ((fd=open("myfile", O_WRONLY | O_CREAT, 0660))==-1)
    {
      printf("Cannot open file");
      exit(1);
    }
  while(i<ac)
    {
      write(fd,av[i],strlen(av[i])); //check the return value of write
      write(fd,sep,strlen(sep));
      perror("write");
      i++;
    }
  close (fd);

并包括 unistd.h fcntl.h

于 2013-07-09T07:47:36.460 回答
1

打开文件时需要指定打开的模式(读取或写入)。在您的公开通话中,您没有指定任何模式,并且您正在提供文件权限标志。有关更多信息,请参阅 open system call 的手册页。

你可以在公开电话中试试这个

fd=open("myfile", O_WRONLY | O_CREAT, 0660);

检查您的 write 调用的返回值,它失败了,因为您没有指定任何模式并且您正在尝试将数据写入该文件。

于 2013-07-09T07:55:52.730 回答