我是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;
}
感谢。
答案 0 :(得分:3)
您的程序无法正常运行 - 例如,您没有为read
和write
提供足够的参数(假设您打算调用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