2

为了写入新文件,我执行以下操作:

// some code 
...

 pfd[i][0] = open(argv[j+1],O_CREAT|O_WRONLY,0600);

问题 :

  1. open使用or和有区别fopen吗?

  2. 如何使用模式open打开现有文件append

4

4 回答 4

2
  1. open适用于 POSIX 系统。它不能移植到其他系统。fopen是 C 标准的一部分,因此它适用于所有 C 实现。我忽略了open返回文件描述符的区别,其中fopen返回FILE *.

  2. 用于O_APPEND打开附加模式。

于 2012-05-22T15:59:18.897 回答
1
  1. 区别在于它open是一个不可移植的 POSIX 函数,而它是一个fopen可移植的标准 C 函数。
  2. O_APPEND调用时指定open使用附加模式。
于 2012-05-22T15:58:53.790 回答
1

利用O_APPEND

引用POSIX 文档open()中的描述

O_APPEND
如果设置,文件偏移量应设置为每次写入之前的文件末尾。

于 2012-05-22T15:59:35.773 回答
1

1) 是的。有一个区别:缓冲或非缓冲 I/O。
open()给你一个 RAW 文件句柄(在你的程序和文件系统中的文件之间没有缓冲区)。

fopen()授予您以流缓冲区模式处理文件的权限。例如,您可以逐行读取/写入数据 (\0)。

使用以下功能时,您会看到很大的不同:fprintf(), fscanf(), fgets(), fflush().

ps:fopen()不比open()。它们是不同的东西。有时您需要流缓冲区 (fopen),有时您需要逐字节工作 (open)。

这是关于流的一个很好的参考:http ://www.cs.cf.ac.uk/Dave/C/node18.html#SECTION001820000000000000000

2)要以附加模式打开,请添加O_APPEND标志:

open(argv[j+1],O_CREAT|O_APPEND|O_WRONLY,0600);

于 2012-05-22T16:23:02.983 回答