Linux的文件学习

一、标准输入输出
Linux里的标准输入输出文件符
标准输入0 从键盘获取
标签输出1 在屏幕显示(shell)
错误输出2 在屏幕显示(shell)
简答的测试代码如下

char readbuff[128];
int n_read = read(0,readbuf,128);//从键盘读取输入
int n_write = write(1,readbuf,strlen(readbuf);//将读取的信息向shell写入

效果

linux提供的write与read函数返回的是写入或读取的字节数

二、小练习-复制文件

 8 int main(int i, char **array)     //参数:被复制文件   复制的文件
  9 {
 10 
 11         int fdSrc;//文件描述符  被复制文件
 12         int fdDes;//文件描述符  复制的文件
 13 
 14         char *readBuf = NULL;
 15         //判断输入的参数是否正确
 16         if(i != 3){
 17                 printf("pararm error\n");
 18                 exit(-1);
 19         }
 20 
 21 
 22         fdSrc = open(array[1],O_RDWR);//只读打开
 23         //移动光标位置
 24         int size = lseek(fdSrc,0,SEEK_END);//文件描述符,SEEK——END光标位置指向文件尾后再增加0个位移量
 25         //当调用成功时则返回目前的读写位置,也就是距离文件开头多少个字节
 26         lseek(fdSrc,0,SEEK_SET);//光标指向文件头
 27 
 28         readBuf = (char *)malloc(size * sizeof(char) + 8);//申请存储空间
 29 
 30         int n_read = read(fdSrc,readBuf,size);
           // int nread = fread(ret,1,1024,fp);//读到ret,每次读1个字节,读1024次,从fp里面读
 31 
 32         fdDes = open(array[2],O_RDWR|O_CREAT,0600);//打开复制文件
 33 
 34         int n_write = write(fdDes,readBuf,strlen(readBuf));//向复制文件写入数据
 35 
 36 
 37 
 38 
 39         free(readBuf);
 40         close(fdSrc);//关闭文件
 41         close(fdDes);//关闭文件
 42 
 43         return 0;
 44 }

三、小练习-修改配置文件

``8 int main(int i, char **array) // 参数:配置文件名
9 {
10 int fdSrc ; //配置文件描述符
11
12 char *readBuf = NULL;
13 //参数个数
14 if(i != 2){
15 printf(“pararm error\n”);
16 exit(-1);
17 }
18
19 //打开配置文件
20 fdSrc = open(array[1],O_RDWR);
21
22 //确定文件的大小-用光标移动来确定,这是方式之一
23 int size = lseek(fdSrc,0,SEEK_END);
24 lseek(fdSrc,0,SEEK_SET);
25
26
27 readBuf = (char *)malloc(size * sizeof(char) + 8);//分配内存
28 int n_read = read(fdSrc,readBuf,size);//读取配置文件里的内容
29
30
31
32
33 char *p = strstr(readBuf,"lisi = ");//找到想修改的地方的头
34
35 if(p == NULL){
36 printf(“not found\n”);
37 exit(-1);
38 }
39
40
41 p = p + strlen("lisi = ");//移动指针
42 *p = ‘9’;
43
44 lseek(fdSrc,0,SEEK_SET);//光标移动到文件头
45
46 int n_write = write(fdSrc,readBuf,strlen(readBuf));//将修改好的内容重新写入配置文件
47
48 close(fdSrc);//关闭文件
49
50 return 0;
51 }

四、写入结构体
不过打开写入int类型时,打开文件时,看到时乱码的,但计算机认为不是乱码

  9 struct Text
 10 {
 11 
 12         int a;
 13         char c;
 14 
 15 };
 16 
 17 
 18 int main()
 19 {
 20         int fd;
 21         int n_read;
 22         int n_write;
 23         struct Text data[2] = {{100,'a'},{100,'b'}};// 写入文件里面的结构体
 24         struct Text data2[2];//把文件里的结构体内容赋到data2,然后在shell显示   
 25         fd = open("./file1",O_RDWR);
 26         if (fd < 0){
 27                 printf("open file1 failed!\n");
 28                 printf("%d\r\n",fd);
 29 
 30         }
 31 
 32         n_write = write(fd,&data,sizeof(struct Text)*2);//write返回写入多少个字节
 33         lseek(fd,0,SEEK_SET);
 34 
 35         n_read = read(fd,&data2,sizeof(struct Text)*2);//read返回读到多少个字节
 36         printf("%d,%d\r\n",n_write,n_read);
 37         //把读到的内容存到data2中
 38         //printf("read %d,%c\n",data2[0].a,data2[0].c);
 39         //printf("read %d,%c\n",data2[1].a,data2[1].c);
 40         close(fd);
 41 
 42         return 0;
 43 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值