• 使用C语言简单模拟Linux的cat程序


    先给出源码

    //fileio.c
    #include<stdio.h>
    #include<stdlib.h>
    #include<fcntl.h>
    void print(int fd)
    {
        int i,len;
        char buf[10];
        len=read(fd,buf,10);//len是成功读入的字节数,每read一次,文件偏移量就会偏移10个字节位置
        while(len>0)//循环打印,直至读到文件尾部了
        {
            for(i=0;i<len;i++)
            {
                printf("%c",buf[i]);
            }
            len=read(fd,buf,10);
        }
    }
    void prin()
    {
        char buf[1024];//我对指针还不熟,不过换成指针应该会好点吧
        while(1)//死循环打印字符串
        {
            scanf("%s",buf);
            puts(buf);
        }
    }
    int main(int argc,char *argv[])//argc参数个数,注意为1时代表没有参数(只有程序名字),argv[]是指参数,argv[1]指第一个参数,argv[2]指第二个参数。。。
    {
        int fd,i;
        if(argc==1)//没有参数,跳到prin函数,
        {
            prin();
            return 0;
        }
        for(i=1;i<=argc-1;i++)//因为argc为2时才表示有一个参数啊
        {
            fd=open(argv[i],O_RDWR);//以可写可读方式打开
            if(fd==-1)//打开失败
            {
                perror("Error");//显示错误信息
            }   
            else
            {
                print(fd);//打开成功跳转print函数
            }
            close(fd);//记得打开之后关闭文件描述符
        }   
        return 0;
    }
    

    下面给演示一下我的运行结果

    [root@bogon mycode]# gcc fileio.c 
    [root@bogon mycode]# ./a.out 
    linux
    linux
    ok
    ok
    ^C
    [root@bogon mycode]# ./a.out test.txt
    ok
    that is fine
    linux
    [root@bogon mycode]# ./a.out test.txt fileio.c 
    ok
    that is fine
    linux
    #include<stdio.h>
    #include<stdlib.h>
    #include<fcntl.h>
    void print(int fd)
    {
        int i,len;
        char buf[10];
        len=read(fd,buf,10);
        while(len>0)
        {
            for(i=0;i<len;i++)
            {
                printf("%c",buf[i]);
            }
            len=read(fd,buf,10);
        }
    }
    void prin()
    {
        char buf[1024];
        while(1)
        {
            scanf("%s",buf);
            puts(buf);
        }
    }
    int main(int argc,char *argv[])
    {
        int fd,i;
        if(argc==1)
        {
            prin();
            return 0;
        }
        for(i=1;i<=argc-1;i++)
        {
            fd=open(argv[i],O_RDWR);
            if(fd==-1)
            {
                perror("Error");
                //continue;
            }   
            else
            {
                print(fd);
            }
            close(fd);
        }   
        return 0;
    }
    [root@bogon mycode]# ./a.out nothisfile.txt test.txt
    Error: No such file or directory
    ok
    that is fine
    linux
    [root@bogon mycode]#

    这个小程序免不了有bug,大神们发现了的话可以留言交流一下,谢谢

  • 相关阅读:
    npm 中设置环境NODE_ENV变量,判断失败打印process.env.NODE_ENV确实是"development",但是判断process.env.NODE_ENV === "development" 是false
    NuxtJS踩坑日记,一步一步爬出我自己挖的坑。
    Django模型层1
    Django模板层2
    Centos 6.5 版本的下载教程
    上传文件到github
    CSS完整
    前端之JavaScript
    CSS
    多表 查询习题
  • 原文地址:https://www.cnblogs.com/biaopei/p/7730636.html
Copyright © 2020-2023  润新知