文件系统编程之文件写入操作——实验题
//编写代码,完成以下功能:
//1.创建文件file1,写入字符串“abcdefghijklmn”;
//2.创建文件file2,写入字符串“ABCDEFGHIJKLMN”;
//3.读取file1中的内容,写入file2,使file2中的字符串内容为“abcdefghijklmn ABCDEFGHIJKLMN”
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
int main()
{
int fd1,fd2;
fd1 = open ("file1",O_CREAT|O_RDWR,S_IRWXU); //创建一个名为“file1”的文本文件,
//“S_IRWXU”给这个文件可读可写可执行的权限,
//“fd1”是创建这个文件成功后程序返回的文件描述符,相当于这个文件的名字
if (fd1 < 0) //判断创建是否成功
{
perror ("open :");
printf ("errno is : %d \n",errno);
}
else
printf ("open ok\n");
fd2 = open ("file2",O_CREAT|O_RDWR,S_IRWXU); //创建一个名为“file2”的文本文件,
//“S_IRWXU”给这个文件可读可写可执行的权限,
//“fd2”是创建这个文件成功后程序返回的文件描述符,相当于这个文件的名字
if (fd2 < 0) //判断创建是否成功
{
perror ("open :");
printf ("errno is : %d \n",errno);
}
else
printf ("open ok \n");
int fdw1,fdw2;
fdw1 = write (fd1,"abcdefghijklmn",15); //通过文件描述符"fd1"向文件“file1”中写入一个字符串“abcdefghijklmn”
printf("fdw1:%d\n",fdw1); //fdw1是write函数的返回值
if (fdw1 != 15)
{
perror("write fd1 :");
}
else
printf ("write ok \n");
lseek (fd2,16,SEEK_SET); // "lseek"调节读写偏移量,通过这个“SEEK_SET”设置光标调节开始的位置为文件的开头
// “16”就是设置调节的位数为16,就是把光标从文件头往后移动16位,把前面的15位先放在那里,为了后面写入小写字母
//《鼠标点在那个位置就会出现一个闪动的竖线,这个就是光标》
char buf[20] = "ABCDEFGHIJKLMN";// 定义一个数组
fdw2 = write (fd2,buf,20);//通过文件描述符"fd2"向文件“file2”中写入数组 buf 中存放的字符串
printf ("fdw2 %d \n",fdw2);
if (fdw2 < 0) //fdw1是write函数的返回值
{
perror ("write fd2:");
}
else
printf("write ok \n");
lseek (fd1,0,SEEK_SET); // "lseek"调节读写偏移量,通过这个“SEEK_SET”设置光标调节开始的位置为文件的开头
lseek (fd2,0,SEEK_SET); // “0”就是设置调节的位数为0,就是不移动,就是把光标放在文件开头
char re[28];
read (fd1,re,14);//通过文件描述符"fd1" 把 文件“file1”中刚开始写入的那些小写字母写入数组 re 中
write (fd2,re,14);//通过文件描述符"fd2" 向 文件“file2”中写入存放在数组 re 中的内容
close (fd1);
close (fd2);
return 0;
}
/*
“lseek (fd2,16,SEEK_SET); “// "lseek"调节读写偏移量,通过这个“SEEK_SET”设置光标调节开始的位置为文件的开头
// “16”就是设置调节的位数为16,就是把光标从文件头往后移动16位,把前面的15位先放在那里,为了后面写入小写字母
*/