首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用C语言实现shell中wc命令

wc命令是一个用于统计文件中字节数、字数、行数的Unix/Linux命令。下面是用C语言实现wc命令的示例代码:

代码语言:txt
复制
#include <stdio.h>

int main(int argc, char *argv[]) {
    if (argc != 2) {
        printf("Usage: %s <filename>\n", argv[0]);
        return 1;
    }

    FILE *file = fopen(argv[1], "r");
    if (file == NULL) {
        printf("Failed to open file: %s\n", argv[1]);
        return 1;
    }

    int lines = 0;
    int words = 0;
    int bytes = 0;
    int in_word = 0;
    char ch;

    while ((ch = fgetc(file)) != EOF) {
        bytes++;

        if (ch == '\n') {
            lines++;
        }

        if (ch == ' ' || ch == '\t' || ch == '\n') {
            in_word = 0;
        } else if (in_word == 0) {
            in_word = 1;
            words++;
        }
    }

    fclose(file);

    printf("Lines: %d\n", lines);
    printf("Words: %d\n", words);
    printf("Bytes: %d\n", bytes);

    return 0;
}

这段代码首先检查命令行参数的数量,确保只传入一个文件名。然后尝试打开该文件,如果打开失败则输出错误信息并退出。

接下来,代码使用循环逐个读取文件中的字符。在循环过程中,统计行数、字数和字节数。通过判断空格、制表符和换行符来确定是否处于一个单词内,并根据需要更新字数。

最后,关闭文件并输出统计结果。

这是一个简单的用C语言实现wc命令的示例,可以通过编译运行来统计文件的行数、字数和字节数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

任督二脉之Shell的正则表达式cut命令awk命令sed命令sort命令wc命令

VBird说学习Linux,掌握了Shell和正则就相当于打通了任督二脉,此后能力的成长才会突飞猛进。...Shell的基础学习之前已经总结了一篇博客:http://www.cnblogs.com/jyzhao/p/4485553.html 本文将总结Shell的正则表达式及常用的字符处理命令,为打通任督二脉奠定基础...基础正则表达式举例说明 字符截取命令 cut命令 awk命令 sed命令 字符处理命令 sort命令 wc命令 1. 基础正则表达式举例说明 *,....-n 只有经过sed处理的才显示(默认显示全部) -e 直接在命令行模式上进行sed的动作编辑 -f 将sed的动作写入一个文件,然后-f filename执行filename的sed命令 -r 支持扩展型正则表达式语法...wc -w /etc/issue 统计字符wc -m 例13:统计/etc/issue文件的字符数 wc -m /etc/issue

1.2K40
  • C 语言实现操作系统

    本文选自 | 《操作系统基础:C 语言实现用户线程》 Chat 作者 | Allen() 整理 | linse 码农都懂的一句话:C 语言无所不能,什么都能搞。...把 C 学好,上手其他语言也会事半功倍。因为热爱 C 语言,所以才有了以下这篇文—— 一直以来,我们学习线程切换与调度,都是通过阅读操作系统书籍或 Linux 源码甚至反汇编 Window 内核代码。...另外,随着现代化编程语言逐渐流行,C++20 的正式发布,都离不开用户态线程这些基础知识。...1.1 指令执行 不管你的是什么语言编程,最后都要落实到 CPU 上,而 CPU 只认识它自己的语言,机器语言。机器语言可以抽象出对应 CPU 架构的汇编指令。...如果你不理解 CPU 寄存器是什么意思,把它想象成它是 CPU 预先定义好的变量。

    2.2K30

    C语言实现“括号匹配“问题

    个人主页: :✨✨✨初阶牛✨✨✨ 推荐专栏1: C语言初阶 推荐专栏2: C语言进阶 个人信条: 知行合一 本篇简介:>:记录力扣 “括号匹配问题” 题目介绍: 声明:题目来源于力扣....所以我们可以栈来保存每个等待匹配的右括号的左括号是什么,只要匹配成功就把元素弹出,当字符串遍历结束时如果栈为空,就说明所有括号都互相匹配了。那么这个字符串就是有效的。...情况3:(左括号过多或者未匹配成功) 左括号过多,即使右括号用完(这个例子没用完),字符串遍历结束,栈仍有元素(左括号未找到匹配). 栈非空返回false....步骤: 在C语言中使用栈的结构,需要自己造轮子,先设计一个栈出来,文章结尾已经写出,其次是一定要记得初始化(InitST). 计算字符串的长度 如果字符串是长度为奇数,则直接返回false....栈的实现: //栈的实现 //oj题里面不需要写头文件 typedef char stacktype; typedef struct stack { stacktype* data; int top

    22710

    队列实现栈(C语言版本)

    个人主页: :✨✨✨初阶牛✨✨✨ 强烈推荐优质专栏: C++的世界(持续更新) 推荐专栏1: C语言初阶 推荐专栏2: C语言进阶 个人信条: 知行合一 前言 在做这个题目之前,应当熟悉栈和队列这两种数据结构....栈和队列都是常见的数据结构,它们是基于数组或链表实现的线性数据结构。...应用场景:实现程序调用的函数堆栈、表达式求值、括号匹配检验等。...q1; } //将除了最后一个要删除的元素以外其他元素,倒数据到空队列 while(QueueSize(Notempty)>1) { //将有元素的队列的队头的值放入空队列...q1; } //将除了最后一个要删除的元素以外其他元素,倒数据到空队列 while(QueueSize(Notempty)>1) { //将有元素的队列的队头的值放入空队列

    16630

    C语言实现PID控制代码

    PID控制算法的C语言实现三 位置型PID的C语言实现 上一节已经抽象出了位置性PID和增量型PID的数学表达式,这一节,重点讲解C语言代码的实现过程,算法的C语言实现过程具有一般性,通过PID...算法的C语言实现,可以以此类推,设计其它算法的C语言实现。...增量型PID的C语言实现 上一节中介绍了最简单的位置型PID的实现手段,这一节主要讲解增量式PID的实现方法,位置型和增量型PID的数学公式请参见我的系列文《PID控制算法的C语言实现二》的讲解...其它部分的代码参见《PID控制算法的C语言实现三》的讲解,不再赘述。...专家PID与模糊PID的C语言实现 本节是PID控制算法的C语言实现系列的最后一节,前面8节,已经分别从PID的实现到深入的过程进行了一个简要的讲解,从前面的讲解不难看出,PID的控制思想非常简单

    2.1K20

    024:Java实现shell命令cat 1.log | grep a | sort | uniq -c | sort -rn的功能

    artificial-intelligence-codes-coding-247791.jpg 参考答案 这个问题考察的是对Linux命令的熟悉程度,以及对Java中集合操作的综合运用,自从转到Java...8以后,我就一直使用流来处理集合了,下面的代码就是我流来实现的参考答案 package org.java.learn.java8.stream; import java.io.*; import...按照字典序从小到大排序 lines = lines.stream().sorted().collect(Collectors.toList()); //uniq -c,...Collectors.toList()); res.forEach(System.out::println); } } 知识点梳理 背景&基本概念 在以前,要操作一个集合,按照Java作为命令语言的特点...使用流写出来的代码可读性很好、表达能力很强,我目前在开发,能使用流的地方一定会使用流,它帮助我减少了很多代码行数。

    1.4K30

    C语言实现简单的猜数字游戏

    2 游戏实现思路: 2.1 emun函数(菜单): 首先我们可以以函数的形式制作一个简易菜单,方便玩家选择开始游戏或者退出游戏 代码如下: void emun() { printf("********...**\n"); } 2.2 main函数: 在游戏开始之前,我们先构想一下游戏的大概运行过程: 首先,不管玩家是否进行游戏,我们都应该先打印一个菜单让玩家进行选择,之后根据玩家的不同的选择来执行不同的命令...); return 0; } 解读: 创建变量input用来保存玩家选择的数字,然后用switch语句来创造不同选择的路径; 如果选择了0,那么就退出循环,如果选择了1,那么就进入游戏,游戏过程game...函数来实现; 如果选择了除了1和0以外的其他数字,则进入default,进行报错。...time(NULL)); int r = rand() % 100 + 1; 则此时的r的范围就是1~100; 因为猜数字游戏很难一次就猜对数字,所以我们一般要猜很多次,故而我们需要使用while函数来实现循环

    14610
    领券