使用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,大神们发现了的话可以留言交流一下,谢谢
使用C语言简单模拟Linux的cat程序的更多相关文章
- 通过简单的Linux内核启动程序代码窥探操作系统的启动原理
作者:吴乐 山东师范大学 <Linux内核分析> 孟宁 MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.程序设计与分析 ...
- Linux 内核 链表 的简单模拟(1)
第零章:扯扯淡 出一个有意思的题目:用一个宏定义FIND求一个结构体struct里某个变量相对struc的编移量,如 struct student { int a; //FIND(struct stu ...
- Linux 内核 链表 的简单模拟(2)
接上一篇Linux 内核 链表 的简单模拟(1) 第五章:Linux内核链表的遍历 /** * list_for_each - iterate over a list * @pos: the & ...
- Linux内核分析第三周学习总结:构造一个简单的Linux系统MenuOS
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.Linux内 ...
- 以Qemu模拟Linux,学习Linux内核
文章名称:以Qemu模拟Linux,学习Linux内核作 者:five_cent文章地址:http://www.cnblogs.com/senix/archive/2013/02/21/29 ...
- 运用Python语言编写获取Linux基本系统信息(二):文件系统使用情况获取
本文跟着上一篇文章继续写,上一篇文章的链接 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本.内核.当前时间 一.随便说说 获取文件系统使用情况的思路和上一篇获取主要系统是 ...
- Linux下简单的取点阵字模程序
源:Linux下简单的取点阵字模程序 Linux操作系统下进行简单的图形开发,经常会用到取字模的软件,但是Linux并没有像Windows下的小工具可用,我们也并不希望为了取字模而频繁地切换操作系统. ...
- Linux内核分析— —构造一个简单的Linux系统MenuOS(20135213林涵锦)
Linux内核分析— —构造一个简单的Linux系统MenuOS 实验内容 Linux内核的启动过程,从start_kernel到init进程启动 使用实验楼的虚拟机打开shell cd LinuxK ...
- python--selenium简单模拟百度搜索点击器
python--selenium简单模拟百度搜索点击器 发布时间:2018-02-28 来源:网络 上传者:用户 关键字: selenium 模拟 简单 点击 搜索 百度 发表文章摘要:用途:简单模拟 ...
随机推荐
- linux 在执行命令过程中,反单引号(`)这个符号代表的意义为何?
在一串命令中,在`之内的命令将会被先执行,而且执行出来的结果将作为外部的输入信息.例如:uname -r 会显示出目前的内核版本,而我们的内核版本在/lib/modules里面,因此.你可以先执行un ...
- tp配置
<?php// +----------------------------------------------------------------------// | ThinkPHP [ WE ...
- Android开发 ---Button的OnClickListener的三种实现方法
button的OnClickListener的三种实现方法 onclick事件的定义方法,分为三种,分别为 1.在xml中进行指定方法: 2.在Actitivy中new出一个OnClickListen ...
- byte[]->new String(byte[]) -> getByte()引发的不一致问题
今天接短信接口,短信接口提供了sdk,我们可以直接用sdk发送请求然后发送对应短信. 但是想使用我们平台自定义的httpUtil实现. 然而忙了1天半,才解决这个问题,还是我同事帮忙找出问题并解决的. ...
- Capjoint
前期知识储备: 现如今的全球台站分布情况:在全球大陆的分布并不均衡.在美国加利福尼亚.日本.中国台湾等地区,台站分布密集,数字化程度高.然而在世界很多地区发生的地震,往往在300km范围内仅有2到3个 ...
- L327 找灵魂伴侣
Looking for the Perfect Partner I'm sure we all remember a time when we fell in love. For some it wa ...
- python 常用的高阶函数
前言 高阶函数指的是能接收函数作为参数的函数或类:python中有一些内置的高阶函数,在某些场合使用可以提高代码的效率. map() map函数可以把一个迭代对象转换成另一个可迭代对象,不过在pyth ...
- Java学习笔记13(equals()方法;toString()方法)
equals()方法: equals方法是Object类中的方法:Object是所有类的祖宗,所以所有类都有equals()方法: boolean equals(Object obj); equals ...
- SQL注入之Sqli-labs系列第九关和第十关(基于时间盲注的注入)
开始挑战第九关(Blind- Time based- Single Quotes- String)和第十关( Blind- Time based- Double Quotes- String) gog ...
- pdb的数量限制
Decide How to Configure the CDB --搜索文档 Prepare to create the CDB by research and careful planning. T ...