【问题标题】:What is a FILE * type in Cocoa,and how properly use it?什么是 Cocoa 中的 FILE * 类型,以及如何正确使用它?
【发布时间】:2011-10-12 10:29:24
【问题描述】:

我正在尝试从我的 Cocoa APP 运行 Bash 命令。并接收输出。我正在使用管理员权限执行所有这些命令。 How to get output from Admin Priveleges bash script, called from Cocoa?

我想我需要 FILE * 类型来存储输出,但我不知道如何使用它。

什么是FILE*类型?又该如何使用呢?

【问题讨论】:

  • FILE* 不是 Cocoa。这是 POSIX C。
  • 好的,谢谢。以及它应该如何在 Cocoa 中使用?
  • @User1234 与 C 中的相同。请参阅我的答案。

标签: objective-c macos cocoa posix


【解决方案1】:

FILE * 是 C 类型,它与 Cocoa 没有任何关系。它是打开文件的句柄。这是一个例子:

#include <stdio.h>

int main () {
  FILE *file;
  file = fopen("myfile.txt", "w"); // open file
  if (!file) { // file couldn't be opened
    return 1;
  }
  fputs("fopen example", file); // write to file
  fclose(file);
  return 0;
}

在 Cocoa 中,您通常应该分别使用 NSStringNSDatawriteToURL:atomically:encoding:error:writeToURL:atomically: 方法。

【讨论】:

  • 我问的原因..在这里stackoverflow.com/questions/7710068/…。我需要接收来自 bash 命令的输出。你能帮我解决这个问题吗?
  • 使用该问题的代码后,使用fread 函数从pipe 读取。
  • 所以我需要创建一个文件,并在读取后写入它?不写入文件就无法读取它?还是临时写?
  • 这里是一个例子:gist.github.com/1281162。您直接从pipe 阅读。请注意,在 UNIX 系统上,管道的使用方式与文件相同。
  • 非常感谢。但我还是很困惑。 FILE * nil ,它是如何工作的?我正在尝试将输出存储在 NSArray 中,但无法弄清楚
【解决方案2】:

FILE 是一个 ANSI C 结构,用于文件处理。 fopen 函数返回一个文件指针。该指针指向一个包含有关文件信息的结构,例如缓冲区的位置、缓冲区中的当前字符位置、文件是否正在被读取或写入,以及是否发生错误或文件结尾。用户不需要知道细节,因为从 stdio.h 获得的定义包括一个名为 FILE 的结构声明。文件指针唯一需要的声明是

FILE *fp;
FILE *fopen(char *name, char *mode);

这表示 fp 是指向 FILE 的指针,而 fopen 返回指向 FILE 的指针。请注意 FILE 是类型名称,如 int,而不是结构标记;它是用 typedef 定义的。

#include <stdio.h>

int main()
{
   FILE * pFile;
   char buffer [100];

   pFile = fopen ("myfile.txt" , "r");
   if (pFile == NULL) perror ("Error opening file");
   else
   {
     while ( ! feof (pFile) )
     {
       if ( fgets (buffer , 100 , pFile) != NULL )
         fputs (buffer , stdout);
     }
     fclose (pFile);
   }
   return 0;
}

此示例读取名为 myfile.txt 的文本文件的内容并将其发送到标准输出流。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2013-05-10
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    相关资源
    最近更新 更多