用参数编译和执行c程序

时间:2012-10-13 18:17:27

标签: c linux ubuntu

我是C程序和linux的新手,我们如何编译和运行这个程序?

我已尝试gcc example.c然后./a.out,但它出现了input file cannot be opened之类的错误(我在read方法中写了这个错误)

// example.c
int main(int argc, char *argv[])
{
    char* input = argv[1];
    read(input);

    char* output = argv[2];
    write(output);

    return 0;
} 

感谢。

3 个答案:

答案 0 :(得分:3)

您的程序无法正常运行 - 例如,您没有为readwrite提供足够的参数(假设您打算调用POSIX read(2)并且write(2),即)。

要回答您的实际问题,问题似乎是您没有提供任何参数。你需要运行它:

./a.out FILE1 FILE2

FILE1替换为输入文件的名称,将FILE2替换为输出文件的名称。

答案 1 :(得分:2)

这里有几个问题,包括错误地使用“read()”和“write()”。

建议:

1)试试这个:

// example.c   
#include <stdio.h>

int main(int argc, char *argv[])
{
    FILE *fp = NULL;
    char *out_buff = "Hello C";

    printf ("Parsing input arguments...\n");
    if (argc != 2) {
      printf ("Specify output filename!\n");
      return 1;
    }

    printf ("Opening file %s...\n", argv[1]);
    fp = fopen (argv[1], "w");
    if (fp == NULL) {
      perror ("file open error!");
      return 1;
    }

    printf ("Writing output %s...\n", out_buff);
    fprintf (fp, "%s", out_buff);

    printf ("Done\n");
    return 0;
} 

答案 2 :(得分:1)

首先read()和write()都接受3个参数(只有一个给定)。

其次它应该像这样使用:

int ifilehandle = open(argc[1],O_RDONLY,S_IREAD);
int ofilehandle = open(argc[2],O_WRONLY,S_IWRITE);
char buffer[32767];
read(ifilehandle,&buffer,32766);
write(ofilehandle,&buffer,32766);
close(ifilehandle);
close(ofilehandle);

第三,应该像这样调用a.out:

./a.out filename1.extension filename2.extension