先给出源码

//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,大神们发现了的话可以留言交流一下,谢谢

使用C语言简单模拟Linux的cat程序的更多相关文章

  1. 通过简单的Linux内核启动程序代码窥探操作系统的启动原理

    作者:吴乐  山东师范大学 <Linux内核分析> 孟宁 MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.程序设计与分析 ...

  2. Linux 内核 链表 的简单模拟(1)

    第零章:扯扯淡 出一个有意思的题目:用一个宏定义FIND求一个结构体struct里某个变量相对struc的编移量,如 struct student { int a; //FIND(struct stu ...

  3. Linux 内核 链表 的简单模拟(2)

    接上一篇Linux 内核 链表 的简单模拟(1) 第五章:Linux内核链表的遍历 /** * list_for_each - iterate over a list * @pos: the & ...

  4. Linux内核分析第三周学习总结:构造一个简单的Linux系统MenuOS

    韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.Linux内 ...

  5. 以Qemu模拟Linux,学习Linux内核

    文章名称:以Qemu模拟Linux,学习Linux内核作      者:five_cent文章地址:http://www.cnblogs.com/senix/archive/2013/02/21/29 ...

  6. 运用Python语言编写获取Linux基本系统信息(二):文件系统使用情况获取

    本文跟着上一篇文章继续写,上一篇文章的链接 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本.内核.当前时间 一.随便说说 获取文件系统使用情况的思路和上一篇获取主要系统是 ...

  7. Linux下简单的取点阵字模程序

    源:Linux下简单的取点阵字模程序 Linux操作系统下进行简单的图形开发,经常会用到取字模的软件,但是Linux并没有像Windows下的小工具可用,我们也并不希望为了取字模而频繁地切换操作系统. ...

  8. Linux内核分析— —构造一个简单的Linux系统MenuOS(20135213林涵锦)

    Linux内核分析— —构造一个简单的Linux系统MenuOS 实验内容 Linux内核的启动过程,从start_kernel到init进程启动 使用实验楼的虚拟机打开shell cd LinuxK ...

  9. python--selenium简单模拟百度搜索点击器

    python--selenium简单模拟百度搜索点击器 发布时间:2018-02-28 来源:网络 上传者:用户 关键字: selenium 模拟 简单 点击 搜索 百度 发表文章摘要:用途:简单模拟 ...

随机推荐

  1. C++ Templates 关于程序库的概念和通用工具

    using namespace std所谓的命名空间,就是一种将程序库名称封装起来的方法,它就像在程序库中竖立了一道围墙 标准程序库中有一部分,比如string classes,支持具体的错误处理,它 ...

  2. RabbitMQ fanout类型的Exchange

    就目前来说,Exchange是与消息发送端有关的,因为它可以指定将消息发送到哪个或哪些队列中. 本篇文章介绍的fanout类型就是指定将消息群发到与Exchange绑定的所有队列中. fanout这个 ...

  3. flask小例

    #写一个app.py,处理3个URL: ''' GET / : 首页,返回Home; GET /signin:登录页,显示登录表单; POST /signin: 处理登录表单,显示登录结果. ''' ...

  4. box-shadow 边框阴影

    box-shadow: 0 0 20px #000 inset;

  5. 用matlab绘制中国地图

    reference:https://jingyan.baidu.com/article/870c6fc36fdacfb03ee4be58.html shp: http://muchong.com/ht ...

  6. SpringMVC配置及使用

    SpringMVC基本配置 SpringMVC是基本请求响应模式的框架. 在项目中集成SpringMVC框架首先需要导入相关的jar包,所需包具体如下: commons-dbcp.jar common ...

  7. 一次Web请求返回406原因与解决方案

    ajax请求,响应信息返回的却是报错406,. 1.断点调试,进入对应处理方法,且得到正确信息返回到解析器.使用的是ssm,前端ftl 2.js将返回错误信息打出来,类似为: 百度406错误出现的原因 ...

  8. Android 删除图片等资源文件 通知系统更新,重新扫描

    public void delPic(String path){ File delFile = new File(path); if (delFile.exists()) { delFile.dele ...

  9. fk的使用细节

    在seiman的博客fk2.3的用法笔记一文中,介绍了当震中距很大时,fk在使用时需要加上-f,这一展平变换的选项. 另外,nt*dt为最终数据的总长度,当震中距为远震范围时,such as:40°, ...

  10. 重启uwsgi脚本备份

    NAME="identifyImg_uwsgi.init" if [ ! -n "$NAME" ];then echo "no arguments&q ...