基本上这个程序正在尝试实现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;
}
答案 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)。
希望它可以帮到你