目标: 使用系统调用实现cp命令。
原理: 使用系统调用fopen打开文件,使用fgets()从文件读数据,使用fputs() 向文件写数据。
linux 文件 创建命令为 vi (文件名).c

文件源码:
- #include
- #include
- #define N 32
-
- int main(int argc,const char *argv[])
- {
- FILE *fp,*fps;
- char buf[N] ="";
- fp=fopen("text.txt","a+");
- fprintf(fp,"%s/n","Nothing Succeeds without a strong will\n");
- fp=fopen("text.txt","r");
- if(fp==NULL)
- {
- perror("fopen");
- exit(1);
- }
- fps=fopen("text1.txt","w");
- if(fps==NULL)
- {
- perror("fopen");
- fclose(fp);
- exit(1);
- }
- while(fgets(buf,N,fp)!=NULL)
- fputs(buf,fps);
-
- fclose(fp);
- fclose(fps);
- return 0;
-
-
- }
运行代码:
- gcc myy.c -o myy
- ./myy
- ./myy
- cat text.txt
- Nothing Succeeds without a strong will
- /nNothing Succeeds without a strong will
- cat text1.txt
- Nothing Succeeds without a strong will
-
结果:

这里我执行了两次的原因是第一次执行,文件只能输出到text.txt文件中,而无法从中获取内容,所以我执行了两次,第二次就可从该文件中取出然后复制到另一个文件。且我的输出text.txt文件为“a+”,即追加方式,不会覆盖原有内容。
当然有一种最直接的解决方法就是将fprintf()函数替换成fwrite(),

更正一下:这是fwrite的正确用法 fwrite(buf,1,N,fp),图片上面那个是我写错了。
第二种方法就是将追加方式改为“w”,

第三种呢就是你提前创建好一个text.txt文件,写入内容,创建方式为 vi text.txt
拿我的为例,写入内容依旧为“Nothing Succeeds without a strong will"
然后就可以删除.c文件中的fprintf()了。

我这里省略的有一些小细节,具体就不和大家演示了,希望大家多多尝试,勇于探索,找到你认为最适用的。![]()