精华内容
下载资源
问答
  • Linux下配置文件读写程序 如果需要修改以下配置文件中的SPEED值为个位数,或者百位数,在很多修改配置文件的代码以及教学中,都只能把各位数修改成另一个个位数,或者将三位数修改成其他的三位数,而不能将一个一位...

    Linux配置文件读写程序(C语言)

    如果需要修改以下配置文件中的SPEED值为个位数,或者百位数,在很多修改配置文件的代码以及教学中,都只能把各位数修改成另一个个位数,或者将三位数修改成其他的三位数,而不能将一个一位数改成三位数或者四位数。又或者在需要修改的等号左右有空格,或者没空格的情况下,有些程序无法完成指定的操作等。

     SPEED = 98
     SIZE = 22
     HIGHT = 55
     LONG = 5
    

    经过下午一两个小时的思考与调试,终于写出了一个自己比较满意的程序。

    所需要关键函数有:
    open(); lseek(); read(); write();



    程序代码:

    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <string.h>
    #include <stdlib.h>
    
    int main(int argc ,char **argv)
    {
        int fpr=open(argv[1],O_RDONLY);
        if(fpr<0)
        {
            perror("failed");
            return -1;
        }
    
        int fileSize=lseek(fpr,0,SEEK_END);
        if(fileSize<=0)
        {
            printf("read file is empty\n");
            return -2;
        }
    
        lseek(fpr,0,SEEK_SET);
    
        char *buf=(char *)malloc(sizeof(char)*fileSize);
        if(read(fpr,buf,fileSize)!=fileSize)
        {
            printf("read size != fileSize\n");
        }
    
        char *temp=(char *)malloc(sizeof(char)*fileSize);
    
        char *find=strstr(buf,argv[2]);
        find=find+strlen(argv[2]);
        while(*find==' '||*find=='=')
        {   
            find++;
        }   
        printf("find=%s\n",find);
    
        int size=0;
        while(buf+size!=find)
        {   
            *(temp+size)=*(buf+size);
            size++;
        }   
    
        while(*find>='0'&&*find<='9')
        {   
            find++;
     }
    
        char *numb=argv[3];
        for(int k=0;k<strlen(argv[3]);k++)
        {
            *(temp+size)=*(argv[3]+k);
            size++;
        }
    
        while(*find)
        {
            *(temp+size)=*find;
            size++;
            find++;
        }
    
        if(fpr>0)
        {
            close(fpr);
            fpr=0;
        }
    
        int writeSize=strlen(temp);
        fpr=open(argv[1],O_WRONLY|O_TRUNC);
        if(write(fpr,temp,writeSize)!=writeSize)
        {
            printf("write size have a wrong\n");
        }
        if(fpr>0)
        {
            close(fpr);
            fpr=0;
        }
    
        return 0;
    }
    

    配置文件conf.conf中的原内容如下:
    配置文件原内容


    在执行 ./a.out conf.conf SPEED 888之后conf.conf中的内容成功修改为:
    修改后的配置文件内容


    如果将SPEED的值改回为一个个位数,执行./a.out conf.conf SPEED 5命令,最终结果如下:
    在这里插入图片描述

           程序在终端会显示出额外的调试信息,用户只需查看所需要修改的配置文件是否修改成功即可。

    程序没有注释,如有问题敬请评论

    展开全文
  • 既然要读写文件,那肯定要使用Linux系统调用了,就是利用Linux系统提供的API进行函数调用,最终来实现文件读写。操作文件通用步骤:打开文件获取文件描述符读写文件关闭文件上面有提到文件描述符,那什么是文件描述...

    感受下C语言在Linux中读写文件用法,纯粹兴趣学习记录。

    既然要读写文件,那肯定要使用Linux系统调用了,就是利用Linux系统提供的API进行函数调用,最终来实现文件读写。

    操作文件通用步骤:

    打开文件获取文件描述符

    读写文件

    关闭文件

    上面有提到文件描述符,那什么是文件描述符?

    当Linux系统打开一个文件的时候,会向程序返回一个非负整数,这个整数标识Linux系统打开的文件记录,通过这个整数就可以操作文件了。要是系统返回-1就表示打开失败了。

    打开文件获取文件描述符

    int open(const char *pathname, int flags);

    第一个参数代表文件名。

    第二个表示文件访问模式有:

    O_READ(只读)

    O_WRONLY,(只写)

    O_RDWR(读写)

    返回参数就是文件描述符(file description)了

    读写文件

    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);

    说了半天没啥干货,直接上代码就明白了

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    void readFile() {

    char s[] = "main.c";

    //只读打开文件

    int fd = open(s, O_RDONLY);

    if(fd == -1) {

    printf("error is %s\n", strerror(errno));

    return;

    }

    printf("sucess fd = %d\n", fd);

    char buf[100];

    memset(buf, 0, sizeof(buf));

    //read返回0表示文件读取完毕

    while(read(fd, buf, sizeof(buf) - 1) > 0) {

    printf("%s\n", buf);

    memset(buf, 0, sizeof(buf));

    }

    printf("%s\n", buf);

    //别忘记关闭

    close(fd);

    }

    void writeFile() {

    char s[] = "abc.txt";

    //读写并追加方式

    int fd = open(s, O_RDWR | O_APPEND);

    if(fd == -1) {

    //发生错误会把错误信息设置到errno中

    //通过strerror函数获取错误内容

    printf("error is %s\n", strerror(errno));

    return;

    }

    printf("sucess fd = %d\n", fd);

    char buf[100];

    memset(buf, 0, sizeof(buf));

    int i = 10;

    while(i-- > 0){

    strcpy(buf, "hello world linux write file \n");

    write(fd, buf, strlen(buf));

    memset(buf, 0, sizeof(buf));

    }

    close(fd);

    }

    int main(int arg, char *args[]) {

    readFile();

    writeFile();

    return 0;

    }

    要是不明白直接在linux系统中看man命令提供的帮助文档

    man 2 read

    man 2 write

    Tip: man 后面的2表示手册类型,因为read、write是Linux提供的系统调用(内核提供的函数),为了保证要查看的帮助是系统调用,所以指定手册类型为2。不加2的话有可能会查到可执行程序(shell命令)的用法。 还有一个常用的手册类型是3表示库函数调用(C程序库中的函数)

    展开全文
  • Linux C 读写文件

    万次阅读 2015-04-14 23:32:07
    感受下C语言Linux中读写文件用法,纯粹兴趣学习记录。 既然要读写文件,那肯定要Linux系统调用了,就是说利用Linux系统...Linux系统提供了两个C函数来实现文件读写 ssize_t read(int fd, void *buf, size_t count

    感受下C语言在Linux中读写文件用法,纯粹兴趣学习记录。

    既然要读写文件,那肯定要使用Linux系统调用了,就是利用Linux系统提供的API进行函数调用,最终来实现文件读写。

    操作文件通用步骤:

    打开文件获取文件描述符
    读写文件
    关闭文件

    上面有提到文件描述符,那什么是文件描述符?
    当Linux系统打开一个文件的时候,会向程序返回一个非负整数,这个整数标识Linux系统打开的文件记录,通过这个整数就可以操作文件了。要是系统返回-1就表示打开失败了。

    • 打开文件获取文件描述符

    int open(const char *pathname, int flags);

    第一个参数代表文件名。
    第二个表示文件访问模式有:
    O_READ(只读)
    O_WRONLY,(只写)
    O_RDWR(读写)
    返回参数就是文件描述符(file description)了

    • 读写文件

    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);

    说了半天没啥干货,直接上代码就明白了

    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <errno.h>
    #include <unistd.h>
    
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <dirent.h>
    
    void readFile() {
            char s[] = "main.c";
            //只读打开文件
            int fd = open(s, O_RDONLY);
    
            if(fd == -1) {
                    printf("error is %s\n", strerror(errno));
                    return;
            }
    
            printf("sucess fd = %d\n", fd);
            char buf[100];
            memset(buf, 0, sizeof(buf));
            //read返回0表示文件读取完毕
            while(read(fd, buf, sizeof(buf) - 1) > 0) {
                    printf("%s\n", buf);
                    memset(buf, 0, sizeof(buf));
            }
    
            printf("%s\n", buf);
            //别忘记关闭
            close(fd);
    }
    
    void writeFile() {
            char s[] = "abc.txt";
            //读写并追加方式
            int fd = open(s, O_RDWR | O_APPEND);
    
            if(fd == -1) {
                    //发生错误会把错误信息设置到errno中
                    //通过strerror函数获取错误内容
                    printf("error is %s\n", strerror(errno));
                    return;
            }
    
            printf("sucess fd = %d\n", fd);
            char buf[100];
            memset(buf, 0, sizeof(buf));
            int i = 10;
            while(i-- > 0){
                    strcpy(buf, "hello world linux write file \n");
                    write(fd, buf, strlen(buf));
                    memset(buf, 0, sizeof(buf));
            }
    
            close(fd);
    
    }
    
    
    int main(int arg, char *args[]) {
            readFile();
            writeFile();
            return 0;
    }
    

    要是不明白直接在linux系统中看man命令提供的帮助文档

    man 2 read
    man 2 write

    Tip:
    man 后面的2表示手册类型,因为read、write是Linux提供的系统调用(内核提供的函数),为了保证要查看的帮助是系统调用,所以指定手册类型为2。不加2的话有可能会查到可执行程序(shell命令)的用法。
    还有一个常用的手册类型是3表示库函数调用(C程序库中的函数)

    展开全文
  • 利用QT程序读写配置文件的例子,用到了QSettings类可以非常方便的对配置文件进行读写
  • 亲测有效
  • 最近一直在忙毕设,出现了很多问题。...一直认为,在C语言里物物皆文件,而write和read一类的读写文件的函数,应该是不能同时使用的,系统是会出错的。 实际上应该更加准确的去形容:write和read的

    最近一直在忙毕设,出现了很多问题。

    今天终于把物联网毕业设计应用层到底层的数据连接上了。

    现在上一个让我最无奈的问题。

    在ARM开发板系统里面,文件到底可不可以同时被不同的程序读和写?

    之前一直都存在一个非常严重的误区。

    一直认为,在C语言里物物皆文件,而write和read一类的读写文件的函数,应该是不能同时使用的,系统是会出错的。

    实际上应该更加准确的去形容:write和read的函数不是不可以同时读写同一个文件,而是如果同时读写的话,当出现先后的问题的时候,读出的数据并不是我们想要的结果,应该尽量避免同时读写同一个文件,尤其是在使用同一个进程多个线程分别进行write和read操作的例子的时候。

    我要做是对ARM开发板有一个内部自动运行的进程会一直不断的读取串口数据,而另一个不相关的用户进程,会在用户触发某些条件的时候写入串口文件,一开始有以上的误区,所以想用两个串口分别工作,一个用来读,一个用来写,结果根本收不到数据。(这里说的串口是Rx、Tx)

    后来,我觉得不行还是得两个进程对同一个串口读取。我就现在linux系统下尝试了一下

    write.c

    #include <stdio.h>
    #include <sys/stat.h>
    #include <sys/types.h>
    #include <fcntl.h>
    #include <string.h>
    int main(void)
    {
    	int fd;
    	char *c = "Hello, world!\n";
    	fd = open("./a.txt",O_WRONLY|O_APPEND|O_CREAT,0777);
    	if (fd <0)
    	{
    		perror("open file failed");
    		return 0;
    	}
    	while(1){
    		if(write(fd,c,strlen(c)) < 0)
    		{
    			perror("write failed");
    			return -1;
    		}
    	}
    	return 0;
    }

    这个write会创建一个文件,并且不断的往内部写入数据,我这里并没有给进程退出的出口,直接让其进入死循环中。

    运行时直接加上&,脱离bash,进入后台运行。

    @ubuntu:~/$ ./write &

    read.c

    #include <stdio.h>
    #include <sys/stat.h>
    #include <sys/types.h>
    #include <fcntl.h>
    int main(void)
    {
    	int fd;
    	char buff[2];
    	fd = open("./a.txt",O_RDONLY);
    	if(fd <0 )
    	{
    		perror("open file failed ");
    		return -1;
    	}
    	while(1){
    	        if(read(fd,buff,2)<0)
    	        {
    		        perror("read failed :");
    		        return -2;
    	        }
    	}
    	printf("%s",buff);
    	return 0;
    }
    用这个程序,在write函数写入的时候不断的读取。

    我先运行write然后再运行read,结果并没有发生什么错误。

    然后我又反着运行,先运行read然后write,最后也是正常的。只是两个程序都没有停止的时候。

    实践证明,同一个文件是可以被不同的进程同时的读写,这里我也提出了一些可能,当wirte运行的时候,如果read开始读取文件,发现文件正在写入会进入阻塞状态,等到写入完成后,开始读取文件内容。反之一样,read的时候write会进入阻塞状态,等待read完成操作。这个论点还需要更进一步的证明。

    展开全文
  • Linux文件读写与缓存

    千次阅读 2017-05-06 00:18:00
    题外话:每日七点,QQ群大家分享技术相关文章,睡什么睡起来嗨!...缓存是用来减少高速设备访问低速设备所需平均时间的组件,文件读写涉及到计算机内存和磁盘,内存操作速度远远大于磁盘,如果每次调用read,wri
  • 已经用VC建了一个纯C的环境,直接使用。INI 都建好了。一目了然。不需要你找东找西。
  • Linux C++ 文件读写

    千次阅读 2020-02-03 11:52:11
    Linux C++ 文件读写判断文件是否存在创建新文件读取文件内容向文件写入内容 判断文件是否存在 可以使用 ifstream 来判断文件是否存在 void check_file_test(char const *filePath) { /...
  • Linux监控文件读写

    千次阅读 2019-07-25 17:18:34
    如何去监测目标文件, 我思考了很久仍没有头绪,翻了翻开发大赛入围名单, 发现马艺诚同学使用了hook方法来监测进程操作目标文件。于是下午试了试, 确实可行(毕竟人家已经做出来了嘛)。下面讲解一下我下午尝试的...
  • LinuxC语言文件读写

    千次阅读 2012-05-23 16:00:41
    近来又常常读一些Linux下的C的代码,突然发现一个问题,就是ANSI C的很多概念性的问题是基于Linux/Unix的,至少说是非常相似的。那么我大胆的假设一下,为了保持兼容或者是借鉴他人的优点,其实Windows肯定很多
  • 程序运行过程中,有读写配置文件保存当前位置信息的操作。在程序运行过程中突然断电,或者异常终止程序,就会出现配置文件内容出错(内容清空)或者文件直接损坏而无法打开的情况。文件损坏时,可能报出segmentation...
  • 1.linux下INI配置文件读写操作库 ======================================================================== if(false) SET(CMAKE_SYSTEM_NAME Linux) set(CMAKE_C_COMPILER "/home/swapp/arm/5.4.0/bin/arm-...
  • Linux 文件读写函数的使用方法

    千次阅读 2012-11-14 15:01:01
    Linux平台下对文件编程可以使用两类函数:(1)Linux操作系统文件API;(2)C语言I/O库函数。 前者依赖于Linux系统调用,后...Linux文件操作API涉及到创建、打开、读写和关闭文件。  创建 int creat(const char
  • linux 配置文件读写解析

    千次阅读 2018-03-21 20:52:03
    有时我们自己写Linux下配置文件,需要手动解析,然后使得程序可以配置的 类似于以下格式 simple.conf:  ## Sample configuration file ip=192.16.31.2 port=22 Desktop-Picture = /usr/images/earth.jpg Position =...
  • 使用到进程、文件IO实现子进程写、父进程读。 代码 #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;sys/types.h&amp;gt; #include &amp;lt;sys/stat.h&amp;gt; #include &amp;lt;...
  • Linux下的文件读写

    千次阅读 2019-04-01 10:07:40
    应用程序(打开文件)-》各种库(标准库fopen)-》系统调用(open)-》内核(驱动)-》硬件(磁盘)。 系统调用:内核提供给外界访问的接口函数,调用这些函数将使进程进入内核态。 1、UNIX、Linux大部的系统...
  • Linux C 开发 配置文件读写库 Libconfig

    千次阅读 2019-05-17 10:26:04
    程序开发过程中往往很多参数需要放在配置文件中,因为这样可以避免更改代码重新编译的问题。通常我们可以通过自己读init文件来实现,不过已经有很多人做了这方面的东西,可以借用,Libconfig就是其中之一。 ...
  • Javaweb上传文件Linux 没有读写权限

    千次阅读 2019-07-12 10:40:37
    1.javaweb程序(saas-business)部署在linux系统 tomcat服务器下,使用该程序里面上传图片功能,上传图片至linux服务器挂载盘(共享盘)中/nfs/uploads/目录下。tomcat是以root用户来运行的。 2.website,部署在另一...
  • Linux内核读写文件

    千次阅读 2010-08-27 10:24:00
    在用户态,读写文件可以通过read和write这两个系统调用来完成(C库函数实际上是对系统调用的封装)。 但是,在内核态没有这样的系统调用,我们又该如何读写文件呢?
  • Linux C文件读写的一些细节问题 我们知道,在Linux C库中提供有 fwrite() fread() 等这些标志库函数用于程序对文件的操作 现在有个问题:假设程序设计需要我们往一个文件写入少量数据, 然后再把它读出来。这个...
  • 为了创建一个新的文件描述,需要使用系统调用open #include<fcntl.h> #include<sys/types.h> #include<sys/stat.h> int open(const char* path,int oflags); int open(const char* path,int ...
  • LinuxC语言中,除了用通用的《【C文件读写问题》(点击打开链接)中介绍过的fopen等C语言通用操作文件以外,其Linux应用请参考《【Linux】利用C语言文件流复制单一文件》(点击打开链接),还能用文件标识符还...
  • 转自https://blog.csdn.net/qiurisuixiang/article/details/6642734注意:在linux下使用eclipse+CDT运行...(因为涉及到文件读写权限,普通状态可能无法完成操作,root状态下会更好一些。)一.关于文件操作的几个...
  • Linux文件类型及如何查看,修改文件读写权限 分类: linux2010-05-05 16:26 4549人阅读 评论(1) 收藏 举报 linuxuser终端c 现在使用 ls -l 命令,查看详细信息格式的文件列表,您将会看到如下...
  • 基于linux下的c/c++程序,多线程,断点续传功能没有实现, 可传输大于2G的文件。 设计思想:预先分配的N个缓冲区形成类似循环队列。 【1】预先分配N个缓冲区,多线程方式对缓冲区进行读写互斥,有类似生产者消费者的...
  • LinuxC编程的文件读写 详细讲解了相关函数的用法
  • Linux I2C设备读写应用程序

    千次阅读 2017-09-21 15:50:43
    linux中,I2C总线被做为一个标准总线加进内核,所有的I2C设备都被挂到该总线上,通过I2c core进行管理,设备驱动通过调用I2c core中的注册函数将I2C驱动注册到I2C总线上,在probe到相应I2C设备时为之创建一个...
  • C语言文件读写函数总结

    千次阅读 多人点赞 2018-04-30 23:51:59
    一、字符读写 1、字符写入文件函数 fputc 2、从文件中读取字符 fgetc 二、字符串的读写 1、字符串写入文件函数 fputs 2、从文件中读取字符 fgets 三、块数据读写 1、向文件中写入块数据fwrite 2、从文件中...
  • Linux环境下测试大文件(超过2G)的读写效率

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 163,938
精华内容 65,575
关键字:

linux文件读写c程序

linux 订阅