首页
学习
活动
专区
工具
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语言实现

    但栈要怎么实现呢?使用数组还是链表? 栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优⼀些。 因为数组在尾上插入数据的代价比较小。...下面一幅图来给大家解释一下链表还是数组。...1.3.1顺序表实现栈的优点: 1.内存连续性:顺序表在内存是连续存储的,相比于链表的动态内存分配,顺序表的元素在物理上更加紧凑。这样可以减少内存碎片化,提高内存的利用效率。...2.随机访问:顺序表可以通过索引直接访问栈的元素,具有随机访问的能力。这意味着可以快速访问栈任意位置的元素,而不需要遍历整个链表。...arr[ps->top - 1]; } int STSize(ST* ps) {     assert(ps);     return ps->top; } 测试文件:text.c

    8710

    c语言实现文件操作

    文件的打开和关闭 我们下面两个函数实现文件的打开和关闭 对于fopen来说,第一个参数传入一个文件的名字,第二个为打开的方式,返回值为一个文件指针,如果打开失败就返会NULL fclose里的参数为传入一个文件指针...我们来看具体的例子 int main() { FILE* pf = fopen("text.txt", "r");//pf来接收 if (pf == NULL) { perror("fopen...,自动创建了一个"text.txt"文件,之后调用了fputc函数向文件写入字符 这样一个字符一个字符的写入有点麻烦,还可以通过fputs()函数实现写入一个字符串 fputs("hello...,讲函数返回值接受并以字符形式打印,读取是按照顺序依次往下读取,根据读取到文件末尾返回值为EOF,可以一个循环来实现对文件中所有字符进行遍历。...", c); fclose(pf); pf = NULL; return 0; } 当text.txt文件为abcdefg时运行结果 结合这些操作就可以实现访问任意元素 ftell()

    10810

    C 语言实现操作系统

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

    2.2K30

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

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

    17230

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

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

    24910

    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
    领券