资源简介
自己学习《APUE》时写的linux下一些命令(大概40个左右)实现,仅当学习使用,这些命令包括cat cp echo head ls paste rmdir tail umask who chattr cut expand join mkdir pwd sed tee uniq chgrp date find last mkfifo reboot sort wc chmod df ln mv rename split touch which chown du grep lsattr od rm tac tr whoami
代码片段和文件信息
/*
本程序模拟cat命令(只模拟打印,不处理特殊字符)
历史记录:
日期 作者 描述 联系方式
20140417 卢富波 首次创建 1164830775@qq.com
需求:
仅仅只是将数据打印到标准输出,不对数据中的特殊字符进行处理
如果没输入任何参数,或者输入的文件名为-则从标准输入读数据
*/
#include /* for printf */
#include /* for exit */
#include
#include
#include
#include
#include
#include
#define EXIT_FAILURE 1
#define EXIT_SUCESS 0
#define MAX_BUF_SIZE 1024
static char *program_name = NULL; /* 程序名指针 */
static char *infile = NULL; /* 指向输入文件 */
static int input_desc = -1; /* 输入文件描述符 */
static int exit_status = EXIT_FAILURE; /* 命令退出状态 */
static void
usage(int status)
{
if(status != 0){
fprintf(stderr “Try ‘%s --help‘ for more infomation\n“
program_name);
}else{
printf(“Usage: %s [FILE] ...\n“ program_name);
printf(“with no FILE or when FILE is - %s will read from stdin\n“ program_name);
}
exit(status);
}
static void
cat_exit()
{
exit(exit_status);
}
static void
_cat(int fileno int needexit)
{
char buf[MAX_BUF_SIZE];
int n;
while((n = read(fileno buf MAX_BUF_SIZE)) > 0){
if(write(STDOUT_FILENO buf n) != n){
perror(“in write“);
exit(exit_status);
}
}
if(n < 0){
perror(“in read“);
if(!needexit)
exit(exit_status);
}
if(needexit){
exit_status = EXIT_SUCESS;
exit(exit_status);
}
}
static void
simple_cat(char *file)
{
struct stat statbuf;
if(file == NULL || file[0] == 0){
//sprintf(stderr “some asset error happend\n“);
exit(exit_status);
}
if(file[0] == ‘-‘ && file[1] == 0)/*从标准输入读数据*/
_cat(STDIN_FILENO 1); /*从标准输入读数据并显示数据,然后退出*/
/*下面是从file文件里面读数据了*/
input_desc = open(file O_RDONLY);
if(input_desc < 0){
fprintf(stderr “open file ‘%s‘ error: %s\n“ file strerror(errno));
exit(exit_status);
}
if(fstat(input_desc &statbuf) < 0){
fprintf(stderr “fstat file ‘%s‘ error: %s\n“ file strerror(errno));
close(input_desc);
exit(exit_status);
}
if(S_ISREG(statbuf.st_mode) == 0){
fprintf(stderr “file ‘%s‘ is not a genel file\n“ file);
close(input_desc);
exit(exit_status);
}
_cat(input_desc 0);
close(input_desc);
}
int
main(int argc char *argv[])
{
struct stat stat_buf;
int c;
static struct option const long_options[] =
{
{“help“ 0 NULL ‘h‘}
{NULL 0 NULL 0}
};
program_name = a
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 965 2014-06-25 13:37 my_linux_command\ReadMe.txt
....... 3899 2014-04-17 23:38 my_linux_command\cat.c
....... 4538 2014-05-30 11:55 my_linux_command\chattr.c
....... 2037 2014-05-16 16:37 my_linux_command\chgrp.c
....... 2299 2014-05-15 22:30 my_linux_command\chmod.c
....... 2053 2014-05-16 16:35 my_linux_command\chown.c
....... 2209 2014-05-09 21:30 my_linux_command\cp.c
....... 7807 2014-06-05 12:09 my_linux_command\cut.c
....... 6111 2014-05-16 13:37 my_linux_command\date.c
....... 2869 2014-06-05 12:08 my_linux_command\df.c
....... 1533 2014-06-05 12:08 my_linux_command\du.c
....... 636 2014-05-29 13:49 my_linux_command\echo.c
....... 2479 2014-06-17 09:56 my_linux_command\expand.c
....... 1869 2014-06-03 09:45 my_linux_command\find.c
....... 2131 2014-04-17 19:12 my_linux_command\getopt_long.c
....... 2857 2014-06-05 12:09 my_linux_command\grep.c
....... 4835 2014-05-09 10:37 my_linux_command\head.c
....... 7690 2014-06-17 09:56 my_linux_command\join.c
....... 4370 2014-06-05 12:08 my_linux_command\last.c
....... 268 2014-05-30 11:55 my_linux_command\lib\bit_opr.h
....... 2943 2014-06-17 09:56 my_linux_command\lib\char_map.h
....... 3019 2014-05-15 22:26 my_linux_command\lib\chmod.h
....... 3740 2014-05-16 16:35 my_linux_command\lib\chown.h
....... 513 2014-04-18 00:20 my_linux_command\lib\command_comm.h
....... 8973 2014-05-09 21:22 my_linux_command\lib\copy.h
....... 906 2014-06-17 09:56 my_linux_command\lib\err_msg.h
....... 1887 2014-05-13 21:53 my_linux_command\lib\file_isexist.h
....... 1868 2014-06-03 09:45 my_linux_command\lib\fileflag.h
....... 3328 2014-06-03 09:45 my_linux_command\lib\find_file.h
....... 2360 2014-06-17 09:56 my_linux_command\lib\get_filesize.h
............此处省略50个文件信息
相关资源
- c语言实现的动态规划求最短路径长度
- C语言双语词汇对照表
- C语言-遗传算法的排课源码
- C语言模拟路由DV算法
- 用c语言写的OBB旋转及碰撞检测源代码
- 用C语言编写的usb自动识别程序
- 基于51单片机的12864液晶显示C语言源程
- 分治法求格雷码的C语言代码
- C语言C++魔兽全图源码
- linux环境下C语言编程指南 源代码
- 上传的p2p技术C语言源码
- 连连看C语言小游戏开发源代码
- 磁盘调度算法(c语言)44989
- 音乐跑马灯C语言程序
- bpsk的C语言代码
- 用回溯法解决01背包问题C语言实现
- Linux GTK 聊天室 MySql C语言聊天室
- 单片机流水灯C语言
- C语言版本的DES加密解密算法代码!(
- 连连看 C语言 源代码
- spath(A*算法的C语言源代码)
- 银行家算法C语言实现源文件
- C语言程序设计,谭浩强,清华大学,
- 基于51单片机多节点RS485通信带Protue
- c语言描述超松弛算法的源代码
- 最简单的PI算法(C语言)-用于控制电
- 专升本C语言
- 实序列快速傅里叶变换C语言源代码
- xrc C语言解释器
- udp 聊天室 基于linux c语言实现
评论
共有 条评论