【问题标题】:Unix programming in C for simple files用 C 语言编写简单文件的 Unix 编程
【发布时间】:2011-06-05 09:59:58
【问题描述】:

我必须编写一个简单的程序来将 16 字节的数据输出到第 0 和第 48 位的文件中,并想出了这个程序:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
    int f = create("test.tmp",774);
    if(f>0)
    {
        write(f,"DEPARTMENT OF CS",16);
        lseek(f,48,SEEK_SET);
        write(f,"DEPARTMENT OF IS",16);
    }
    return 0;
}

这有什么问题?当我使用cc 7a.sh -ll 编译时它告诉我:

未定义以引用“创建”

【问题讨论】:

  • 这不是 C++,你甚至不用 C++ 编译器来构建它。它是带有 POSIX 函数的直接 C。也没有理由使用creat 而不是open,而且您对f&gt;0 的测试充其量是有问题的,因为0 是open 可以 的有效文件描述符如果可用,则返回事实。我也看不出为什么您在这里使用 POSIX 特定的文件 I/O 而不是标准 C 库函数。
  • cc 7a.sh -ll?这是一个非常奇怪的命令,用于编译 C++ 源文件!它甚至在文件中看起来都不像 C++。
  • 774 绝对是错误的。你的意思可能是 0774。

标签: c unix file-io


【解决方案1】:

没有名为create的函数

它被命名为creat

【讨论】:

  • @footy 来自链接:“理由 - creat() 函数是多余的。它的服务也由 open() 函数提供。自从许多现有应用程序以来,它主要出于历史目的而包含在内依靠它。”为什么要在新代码中使用它?
  • Ken Thompson 曾经被问到,如果他重新设计 UNIX 系统,他会做些什么不同的事情。他的回答是:“我会用 e 拼写 creat。”
【解决方案2】:
#include <stdio.h>

int main ()
{
  FILE * pFile;
  pFile = fopen ( "example.txt" , "w" );
  fputs ( "This is an apple." , pFile );
  fseek ( pFile , 9 , SEEK_SET );
  fputs ( " sam" , pFile );
  fclose ( pFile );
  return 0;
}

通过http://www.cplusplus.com/reference/clibrary/cstdio/fseek/

【讨论】:

    猜你喜欢
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 2016-07-05
    • 2011-03-20
    • 2011-03-01
    • 1970-01-01
    • 2010-11-15
    相关资源
    最近更新 更多