从用户输入打开文件的C语言Cat程序

时间:2017-09-14 05:49:28

标签: c linux file unix cat

基本上这个程序正在尝试实现UNIX cat命令的简单C版本。它只显示一个文件,如果正确完成,它应该能够在命令行上执行一个命令行参数,该参数由需要显示的名称组成。我试图将其作为参考的一些问题是"如何使用用户输入连续写入文件? C语言","从用户输入创建文件","用c语言完全打开文件"。然而,这些对我没有多大帮助,因为当用光标选择文件时想要打开文件,另一个用另一种语言选择,最后一个有点难以理解,因为我不在那个级别了。以下是我的代码到目前为止,如果你们能够借给我任何建议,我会非常感激!

#include <stdio.h>
#include <stdlib.h>
#define MAX_LEN 30

int main (int argc, char** argv)
{
    File *stream;
    char filename[MAX_LEN];

    printf("File Name: ");
    scanf("%s", filename);
    stream = fopen(filename, "r");

    while(1)
    {
        fgets(stream);
        if(!feof(stream))
        {
            printf("%s", "The file you entered could not be opened\n");
            break;
        }
    }
    printf("To continue press a key...\n");
    getchar();
    fclose(stream);
    return 0;
}

1 个答案:

答案 0 :(得分:0)

如果您的目标是在Linux下重新编写cat功能,则此代码可以在Linux下使用打开,关闭和读取系统调用来实现您的目的。

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

#define BUFFER_SIZE 50

int main(int argc, char **argv)
{
  int   file;
  char  buffer[BUFFER_SIZE];
  int   read_size;

  if (argc < 2)
    {
      fprintf(stderr, "Error: usage: ./cat filename\n");
      return (-1);
    }
  file = open(argv[1], O_RDONLY);
  if (file == -1)
    {
      fprintf(stderr, "Error: %s: file not found\n", argv[1]);
      return (-1);
    }
  while ((read_size = read(file, buffer, BUFFER_SIZE)) > 0)
    write(1, &buffer, read_size);

  close(file);
  return (0);
}

在这段代码中,您可以看到错误检查是通过验证系统调用不会返回-1来完成的(在linux下,系统调用通常在发生错误时返回-1)。

希望它可以帮到你