当前位置: 首页 > news >正文

Linux系统环境编程

1.文件编程

window如何手动修改文件 比如写一个word文档: Linux呢?

打开/创建文档  ->  编辑文档  ->  保存文档  ->  关闭文档

计算机如何帮助我们自动化完成以上操作

操作系统提供了一系列的API

如Linux系统:

打开       open

读写        write /read

光标定位 lseek    

关闭       close

打开/创建文件

参数说明

Pathname:要打开的文件名(含路径,缺省为当前路径) Flags:     O_RDONLY 只读打开        O_WRONLY 只写打开        O_RDWR 可读可写打开    当我们附带了权限后,打开的文件就只能按照这种权限来操作。    

以上这三个常数中应当只指定一 个。下列常数是可选择的:            

O_CREAT 若文件不存在则创建它。使用此选项时,需要同时说明第三个参数mode,用其说明该新文件的存取许可权限。        O_EXCL 如果同时指定了OCREAT,而文件已经存在,则出错。                 O_APPEND 每次写时都加到文件的尾端。        O_TRUNC 属性去打开文件时,如果这个文件中本来是有内容的,而且为只读或只写成功打开,则将其长度截短为0。

Mode:一定是在flags中使用了O_CREAT标志,mode记录待创建的文件的访问权限。

#include <sys/types.h>
       #include <sys/stat.h>
       #include <fcntl.h>
#include <stdio.h>

int main()
{
        //int open(const char *pathname, int flags);
        int fd;
       fd= open ("./file0",O_RDWR);
      return 0;
}

更改为

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>

int main()
{
        //int open(const char *pathname, int flags);
        int fd;
       fd= open ("./file0",O_RDWR);
       if(fd == -1){
                 printf("fd = %d\n",fd);
                fd = open("./file0",O_RDWR|O_CREAT,0600);
                if(fd > 0){
                        printf("creat file0 success!\n");
                        printf("fd = %d\n",fd);
                }
       }
      return 0;
}
 

创建文件creat函数

写入文件

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>

int main()
{
        //int open(const char *pathname, int flags);
        int fd;
        char *buf;
       fd= open ("./file0",O_RDWR);
       if(fd == -1){
                 printf("fd = %d\n",fd);
                fd = open("./file0",O_RDWR|O_CREAT,0600);
                if(fd > 0){
                        printf("creat file0 success!\n");
                        printf("fd = %d\n",fd);
                }
       }

       printf("open file0 success!\n");

//ssize_t write(int fd, const void *buf, size_t count);
       write(fd,buf,strlen(buf));

       close(fd);

      return 0;
}
 

读取文件

#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>

int main()
{
        //int open(const char *pathname, int flags);
        int fd;
        char *buf = "mmm is my lover";
       fd= open ("./file0",O_RDWR);
       if(fd == -1){
                 printf("fd = %d\n",fd);
                fd = open("./file0",O_RDWR|O_CREAT,0600);
                if(fd > 0){
                        printf("creat file0 success!\n");
                        printf("fd = %d\n",fd);
                }
       }

       printf("open file0 success!\n");

//ssize_t write(int fd, const void *buf, size_t count);
       int n_write = write(fd,buf,strlen(buf));
        if(n_write != -1){
                printf("write success!\n");
        }

        close(fd);
        fd= open ("./file0",O_RDWR);

        char *readBuf;
        readBuf = (char *)malloc(sizeof(char)*n_write+1);
   //   ssize_t read(int fd, void *buf, size_t count);
        int n_read = read(fd, readBuf,n_write);
        if(n_read != -1){
                printf("read success!\n");
                printf("read:%d,text:%s\n",n_read,readBuf);


        }


        close(fd);

      return 0;
}

文件”光标”位置

将文件读写指针相对whence移动offset个字节

#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>

int main()
{
        //int open(const char *pathname, int flags);
        int fd;
        char *buf = "mmm is my lover";
       fd= open ("./file0",O_RDWR);
       if(fd == -1){
                 printf("fd = %d\n",fd);
                fd = open("./file0",O_RDWR|O_CREAT,0600);
                if(fd > 0){
                        printf("creat file0 success!\n");
                        printf("fd = %d\n",fd);
                }
       }

       printf("open file0 success!\n");

//ssize_t write(int fd, const void *buf, size_t count);
       int n_write = write(fd,buf,strlen(buf));
        if(n_write != -1){
                printf("write success!\n");
        }

// off_t lseek(int fd, off_t offset, int whence);
        lseek(fd,0,SEEK_SET);

        char *readBuf;
        readBuf = (char *)malloc(sizeof(char)*n_write+1);
   //   ssize_t read(int fd, void *buf, size_t count);
        int n_read = read(fd, readBuf,n_write);
        if(n_read != -1){
                printf("read success!\n");
                printf("read:%d,text:%s\n",n_read,readBuf);


        }


        close(fd);

      return 0;
}
 

关闭文件

#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>

int main()
{
        //int open(const char *pathname, int flags);
        int fd;
        char *buf = "mmm is my lover";
       fd= open ("./file0",O_RDWR);
       if(fd == -1){
                 printf("fd = %d\n",fd);
                fd = open("./file0",O_RDWR|O_CREAT,0600);
                if(fd > 0){
                        printf("creat file0 success!\n");
                        printf("fd = %d\n",fd);
                }
       }

       printf("open file0 success!\n");

//ssize_t write(int fd, const void *buf, size_t count);
       int n_write = write(fd,buf,strlen(buf));
        if(n_write != -1){
                printf("write success!\n");
        }

// off_t lseek(int fd, off_t offset, int whence);
        int fileSize = lseek(fd,0,SEEK_END);
        printf("file size is :%d\n",fileSize);

        char *readBuf;
        readBuf = (char *)malloc(sizeof(char)*n_write+1);
   //   ssize_t read(int fd, void *buf, size_t count);
        int n_read = read(fd, readBuf,n_write);
        if(n_read != -1){
                printf("read success!\n");
                printf("read:%d,text:%s\n",n_read,readBuf);


        }


        close(fd);

      return 0;
}
 

文件编程的一般步骤

打开/创建文件  ->  读取文件/写入文件 -> 关闭文件

#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>

int main(int argc, char **argv)
{
        int fdSrc;
        char *readbuf;
        int fdDes;

        if(argc != 3){
                printf("Param Error!\n");
                exit(-1);
        }
        fdSrc = open(argv[1],O_RDWR);

        int size = lseek(fdSrc,0,SEEK_END);

        lseek(fdSrc,0,SEEK_SET);

        readbuf = (char*)malloc(sizeof(char)*size + 8);
        read(fdSrc, readbuf, size);

        fdDes = open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0600);

        write(fdDes,readbuf,strlen(readbuf));

        close(fdSrc);
        close(fdDes);

      return 0;
}
 

文件编程练手1

实现linux cp命令的代码

#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>

int main(int argc, char **argv)
{
        int fdSrc;
        char *readbuf;
        int fdDes;

        if(argc != 3){
                printf("Param Error!\n");
                exit(-1);
        }
        fdSrc = open(argv[1],O_RDWR);

        int size = lseek(fdSrc,0,SEEK_END);

        lseek(fdSrc,0,SEEK_SET);

        readbuf = (char*)malloc(sizeof(char)*size + 8);
        read(fdSrc, readbuf, size);

        fdDes = open(argv[2],O_RDWR|O_CREAT,0600);

        write(fdDes,readbuf,strlen(readbuf));

        close(fdSrc);
        close(fdDes);

      return 0;
}


文件编程练手2

配置文件的修改

//配置文件的修改,该demo10更改text.config文件里面LENG=3的值。

#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>

int main(int argc, char **argv)
{
        int fdSrc;
        char *readbuf;

        if(argc != 2){
                printf("Param Error!\n");
                exit(-1);
        }
        fdSrc = open(argv[1],O_RDWR);

        int size = lseek(fdSrc,0,SEEK_END);

        lseek(fdSrc,0,SEEK_SET);

        readbuf = (char*)malloc(sizeof(char)*size + 8);
        read(fdSrc, readbuf, size);

        char *p = strstr(readbuf,"LENG=");
        if(p == NULL){
                printf("Not Found!\n");
                exit(-1);
        }
        p += strlen("LENG=");
        *p = '8';

        lseek(fdSrc,0,SEEK_SET);

        write(fdSrc,readbuf,strlen(readbuf));

        close(fdSrc);

      return 0;
}

文件如何记录一个整数


#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>

int main()
{
        int fd = open("./file1",O_RDWR|O_TRUNC);

        int data = 5;
        int data1;

        write(fd,&data,sizeof(int));

        lseek(fd,0,SEEK_SET);

        read(fd,&data1,sizeof(int));

        printf("read : %d\n",data1);


        close(fd);

      return 0;
}

文件如何记录一个结构体

#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>

struct Test{

        int a;
        char c;
};

int main()
{
        struct Test data = {5, 'a'};
        struct Test data1;

        int fd = open("./file1",O_RDWR|O_TRUNC);


        write(fd,&data,sizeof(struct Test));

        lseek(fd,0,SEEK_SET);

        read(fd,&data1,sizeof(struct Test));

        printf("read : %d,%c\n",data1.a,data1.c);


        close(fd);

      return 0;
}

文件如何记录一个结构体数组

#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>

struct Test{

        int a;
        char c;
};

int main()
{
        struct Test data[2] ={ {5, 'a'},{100,'b'}};
        struct Test data1[2];

        int fd = open("./file1",O_RDWR|O_TRUNC);


        write(fd,&data,sizeof(struct Test)*2);

        lseek(fd,0,SEEK_SET);

        read(fd,&data1,sizeof(struct Test)*2);

        printf("read : %d,%c\n",data1[0].a,data1[0].c);
        printf("read : %d,%c\n",data1[1].a,data1[1].c);


        close(fd);

      return 0;
}

相关文章:

  • APP加网站建设预算多少钱阿里云域名查询和注册
  • 深圳电信网站备案网店推广方式有哪些
  • gta5网站正在建设中百度知道在线问答
  • 网页设计网站怎么放到域名里百度识图在线使用
  • 拍拍网的网站建设公司网站制作要多少钱
  • 论坛门户网站建设seo中文意思是
  • NHDeep智能档案题名(标题)校对工具使用说明
  • Linux线程概念及常用接口(1)
  • Redis 乱码和LocalDateTime类型缓存问题
  • 电商领域企业级应用后端开发 (Java) 就业前景深度分析报告 (2025-2030)
  • uniapp项目之小兔鲜儿小程序商城(六) 地址模块:地址管理页的实现,地址表单页的实现
  • 随机算法设计思想总结
  • 闲聊ARM内核参数传递机制
  • Harmony状态管理@Event
  • JVM的内存模型和内存结构
  • 【数字后端】- 什么是NDR规则?
  • Android检测当前进程或者应用是否被调试
  • android脱糖
  • 深度解析torchrun与local_rank
  • NIPS-2001《Partially labeled classification with Markov random walks》
  • 收银机安装飞牛NAS自动息屏方案
  • 程序猿成长之路之数据挖掘篇——聚类算法介绍
  • 01-StarRocks安装部署FAQ
  • 2025年渗透测试面试题总结-2025年HW(护网面试) 10(题目+回答)
  • linux grep的一些坑
  • (3)ROS2:6-dof前馈+PD / 阻抗控制器