目标: 使用系统调用实现cp命令。
原理 : 使用系统调用fopen打开文件,使用fgets()从文件读数据,使用fputs() 向文件写数据。
linux 文件 创建命令为 vi (文件名).c
文件源码:
cs
#include<stdio.h>
#include<stdlib.h>
#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;
}
运行代码:
cs
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()了。
我这里省略的有一些小细节,具体就不和大家演示了,希望大家多多尝试,勇于探索,找到你认为最适用的。