作为一名编程新手,我写这篇文章的目的只是想为自己创建一个知识库,积累一些自己写编程的心得,激励自己在编程路上越走越远,同时也希望能帮到遇到问题的同胞们。不忘初心,方得始终。
这是刚开始我自己摸索写出的程序,但是结果却不是很理想.因为写入的内容是覆盖以前文件的内容,这并不是我想要的。
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<sys/types.h>
4 #include<fcntl.h>
5 #include<string.h>
6 #include<unistd.h>
7 #include<errno.h>
8 #include<sys/stat.h>
9 #define BUFFER_SIZE 102400
10 int main(int argc,char const * argv[])
11 {
12 int fd=-1;
13 int fw=-1;
14 // int fr=-1;
15 struct stat statbuff;
16 int size,write_count;
17 char buffer[BUFFER_SIZE];
18 int read_bytes;
19 if((fd=open(argv[1],O_RDWR))>0)
20 printf("File1 open success!!\n");
21 if(( fw=open(argv[2],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))>0)
22 {
23 printf("File2 establish sucess!!\n");
24 }
25 stat(argv[1],&statbuff);
26 size=statbuff.st_size;
27 write(fw,"1212",4);
28 read_bytes=read(fd,buffer,size/2);
29 // printf("%d\n",read_count);
30 // lseek(fw,0,SEEK_SET);
31 // write(fw,"1212",4);
32 // while(write(fw,buffer,read_bytes)){
33 // stat(argv[1],&statbuff);
34 // size=statbuff.st_size;
35 printf("The size is:%d\n",size);
36 write_count=write(fw,buffer,size/2);
37 // printf("%d\n",write_count);
38 write(fw,"####",4);
39 read(fd,buffer,size/2);
40 write(fw,buffer,size/2);
41 write(fw,"1234",4);
42 close(fw);
43 close(fd);
44 exit(0);
45 }
既然我们能添加内容并保存到一个新文件中,自然我们也是能够可以去掉添加的内容,恢复到文件原来的样子。
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<sys/types.h>
4 #include<fcntl.h>
5 #include<string.h>
6 #include<unistd.h>
7 #include<errno.h>
8 #include<sys/stat.h>
9 #define BUFFER_SIZE 102400
10 int main(int argc,char const * argv[])
11 {
12 // int fd=-1;
13 int fw=-1;
14 int fr=-1;
15 struct stat statbuff2;
16 int size2;
17 char buffer[BUFFER_SIZE];
18 if((fw=open(argv[1],O_RDWR))>0)
19 printf("File2 open success!!\n");
20 if((fr=open(argv[2],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))>0)
21 {
22 printf("file3 build sucess!!\n");
23
24 }
25 stat(argv[1],&statbuff2);
26 size2=statbuff2.st_size;
27 printf("%d \n",size2);
28 int total_size=strlen("1212")+strlen("####")+strlen("1234");
29 printf("%d \n",total_size);
30 int end_size=size2-total_size;
31 printf("%d\n",end_size);
32 lseek(fw,4,SEEK_SET);
33 int read_count=read(fw,buffer,end_size/2);
34 // printf("%d \n",read_count);
35 int write_count= write(fr,buffer,read_count);
36 lseek(fw,(end_size/2)+4,SEEK_SET);
37 read(fw,buffer,end_size/2);
38 write(fr,buffer,end_size/2);
39 close(fw);
40 close(fr);
41 exit(0);
42 }
注:
open函数用于打开和创建文件。以下是 open函数的简单描述:
对于 open函数来说,第三个参数(...)仅当创建新文件时才使用,用于指定文件的访问权限位(accesspermission bits)。pathname 是待打开/创建文件的路径名(如 C:/cpp/a.cpp);oflag用于指定文件的打开/创建模式,这个参数可由以下常量(定义于 fcntl.h)通过逻辑或构成。
O_RDONLY
O_WRONLY
O_RDWR
打开/创建文件时,至少得使用上述三个常量中的一个。以下常量是选用的:
O_APPEND
O_CREAT
O_EXCL
O_TRUNC
O_NOCTTY
O_NONBLOCK
以下三个常量同样是选用的,它们用于同步输入输出
O_DSYNC
O_RSYNC
O_SYNC
open返回的文件描述符一定是最小的未被使用的描述符。
读写文件ssize_t read(int fd, void *buf, size_t count);
ssize_t write(int fd, const void *buf, size_t count);
size_t是unsigned int 表示只能大于等于0
ssize_t是signed int 可以为正,可以为负
int close(int fd);
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。