zoukankan      html  css  js  c++  java
  • LINUX读写文件

    读写文件

    读写文件的函数原型为:

    #include <unistd.h>
    ssize_t read(int fd, void *buf, size_t count);    //文件描述词  缓冲区  长度
    ssize_t write(int fd, const void *buf, size_t count);
    off_t lseek(int fd, off_t offset, int whence);    //用法和fseek一样,只不过第一个形参传递的是fd
    对于 read 和 write 函数,出错返回-1,读取完了之后,返回0, 其他情况返回读写的个数



    //rwfile.c
    #include<stdio.h>
    #include<stdlib.h>
    #include<unistd.h>
    #include<sys/types.h>
    #include<sys/stat.h>
    #include<string.h>
    #include<fcntl.h>
    int main(int argc,char **argv)
    {
            if( 3!=argc )
            {
                    fputs("error args ",stderr);
                    return -1;
            }
            char buf[128]="hello world ";
            int fdw = open(argv[1],O_CREAT|O_WRONLY,0666);
            if( -1==fdw )
            {
                    fputs("error open ",stderr); //perror(open);
                    return -1;
            }
            printf("fdw =%d ",fdw);
            int ret = write(fdw,buf,strlen(buf)); //sizeof(buf)没字符的地方会写入其他字符
            if( 0>=ret )
            {
                    perror("write");
                    return -1;
            }
            printf("write ret=%d ",ret);
            int fdr = open(argv[2],O_CREAT|O_RDONLY,0666);
            if( -1==fdr )
            {
                    fputs("error open ",stderr);  //perror(open);
                    return -1;
            }
            printf("fdr =%d ",fdr);
            bzero(buf,0);
            ret = read(fdr,buf,sizeof(buf));
            printf("read ret=%d ",ret);
            close(fdw);
            close(fdr);
    }


    //如果后面不从新的文件中读取数据,那么 fdr 就是3。
    //追加内容写入文件会自动换行




    O_APPEND  不管光标在哪  都在文件末尾添加

          *******为了每次少写头文件,可以vim head.h  里面存放所有要用到的头文件,最后在.c文件中引用,系统会自己去找头文件;vim func.h 存放头文件  vim main.c #include "func.h"  编译.h自动找


    宏定义: 标准输入描述符,  标准输出,        标准错误输出

              STDIN_FILENO  0STDOUT_FILENO 1STDERR_FILENO 2

    writeSTDOUT_FILENO,"error args ",11;   等价于

    printf("error args ";

    func.h rw_struct.c
    #include<unistd.h>
    #include<sys/types.h>
    #include<sys/stat.h>
    #include<string.h>
    #include<fcntl.h>
    #include<strings.h>
    #include<stdio.h>
    //在文件里面写入结构体,能正常写入,但是查看是乱码 fwrite()能够正常写入
    #include"head.h"
    typedef struct student
    {
            int num;
            char name[20];
            float score;
    }stu,pstu;
    int main(int argc, char **argv)
    {
            //stu s[2]={{100,"meihao",89.23},{101,"xiaomei",34.23}};
            stu s[2]={100,"meihao",89.23,101,"xiaomei",34.23};
            printf("%5d %10s %5.2f ",s[0].num,s[0].name,s[0].score);
            printf("%5d %10s %5.2f ",s[1].num,s[1].name,s[1].score);
            int fdw = open(argv[1],O_RDWR|O_CREAT,0666);
            write(fdw,&s[1],sizeof(stu));
            lseek(fdw,0,SEEK_SET);
            stu tmp;
            int ret = read(fdw,&tmp,sizeof(stu));
            printf("%5d %10s %5.2f ",tmp.num,tmp.name,tmp.score);
            close(fdw);
            return 0;
    }


    标准输入输出文件描述符(区别于文件指针
    与标准的输入输出流对应,在更底层的实现是用标准输入、标准输出、标准错误文件描述符表示的。它们分别用STDIN_FILENOSTDOUT_FILENOSTDERR_FILENO三个宏表示,值分别是0、1、2三个整型数字。
    标准输入文件描述符         STDIN_FILENO         0
    标准输出文件描述符         STDOUT_FILENO        1
    标准错误输出文件描述符     STDERR_FILENO        2
    #include <stdio.h>
    #include <unistd.h>
    #include <string.h>
    int main()
    {
        char szBuf[32],szBuf2[50];
        printf("Input string:");
        fflush(stdout);   //要刷新标准输出流,才可以立即在屏幕上显示”Input  string”
    //fflush用于linux中的时候,只对fflush(stdout)有效。
        int iRet = read(STDIN_FILENO,szBuf,sizeof(szBuf));
        szBuf[iRet]=0;    //read是以无类型指针方式读的数据,不会自动在缓冲区后加0结束标记。
        sprintf(szBuf2,"The string is:%s",szBuf);
        write(STDOUT_FILENO,szBuf2,strlen(szBuf2));
        return 0;
    }



  • 相关阅读:
    Git常用
    自学过程
    SpringJunitTest
    通过Maven更换环境配置文件
    MongDB的DateZone
    工具使用问题
    项目中遇到的关于Java的问题
    iTerm2使用Profiles自动登录
    脚本:将git项目下载到本地并启动
    一些新的认识
  • 原文地址:https://www.cnblogs.com/meihao1203/p/8430239.html
Copyright © 2011-2022 走看看