Linux下C编程-----IO/文件操作 模拟linux ls程序显示文件系统树形结构(2)

简介: Linux下的IO/文件操作练习,知识虽然简单 但是往往基础容易被忽略,偶尔的练习是有必要的。        练习printf /************************************************************************* > File Name: printf.

Linux下的IO/文件操作练习,知识虽然简单 但是往往基础容易被忽略,偶尔的练习是有必要的。

      

练习printf

/*************************************************************************
	> File Name: printf.c
	> Author: 
	> Mail: 
	> Created Time: Wed 11 Feb 2015 01:08:15 AM PST
 ************************************************************************/

#include<stdio.h>
int main()
{ 
    printf("%10s\n","hello");
    printf("%-10s\n","hello");
    printf("%s\n","hello") ;
    printf("%*s\n",10,"hello") ;
    printf("%010d\n",100) ;
    printf("%10.4g\n",1.22) ;
    printf("%10s\n","Hello,I am a programmer !") ;

    return 0 ;
}

练习C标准库的文件复制 相比系统调用  会快 因为有缓冲

/*************************************************************************
	> File Name: cpy.c
	> Author: 
	> Mail: 
	> Created Time: Wed 11 Feb 2015 01:37:56 AM PST
 ************************************************************************/

#include<stdio.h>
int main()
{   
    int c;
    FILE*in=fopen("./printf","r");
    FILE*out=fopen("./printf_tem","w");
    while((c=fgetc(in))!=EOF)
    {
        fputc(c,out) ;
    }

    exit(0);
}

练习查看一个文件的状态

/*************************************************************************
	> File Name: fileinfo.c
	> Author: 
	> Mail: 
	> Created Time: Wed 11 Feb 2015 11:25:21 PM PST
 ************************************************************************/

#include<stdio.h>
#include<sys/stat.h>
#include<unistd.h> 
int main()
{ 
   int fileNo;
   struct  stat fileStat ;
   FILE*pFile= fopen("./cpy","r");
   if(pFile==NULL)
    {
        printf("File Open Error!\n") ;
        exit(0);
    }
   fileNo= fileno(pFile);
   printf("FileNumber:%d\n",fileNo) ;
  if(-1==fstat(fileNo,&fileStat))
    {
        printf("GetFileInfo Error!\n") ;
        exit(0) ;
    }
    printf("DeviceID:%d\n",fileStat.st_dev);
    printf("UserID:%d\n",fileStat.st_uid);
    printf("GroupID:%d\n",fileStat.st_gid);
    printf("FileSize:%d\n",fileStat.st_size);

    return 0 ;
}

我们模拟Linux下的ls程序 

/*************************************************************************
	> File Name: listdir.c
	> Author: 
	> Mail: 
	> Created Time: Thu 12 Feb 2015 12:49:13 AM PST
 ************************************************************************/

#include<stdio.h>
#include<unistd.h>
#include<sys/stat.h>
#include<dirent.h>
#include<string.h>
#include<sys/types.h>
void list_func(char*path,int depth)  
{  
    DIR*pDirHandle= opendir(path);
    struct dirent * dent ;
    struct stat  fstat ;
    if(pDirHandle==NULL)
    {
        printf("OpenDir %s  Error!\n",path);
        exit(0);
    }
   chdir(path);
    while((dent=readdir(pDirHandle))!=NULL)
    {  
        //error then return -1 
        lstat(dent->d_name,&fstat);
        if(S_ISDIR(fstat.st_mode))
        {  
            //remove director . and ..
            if(strcmp(".",dent->d_name)==0||
              strcmp("..",dent->d_name)==0 )
                continue ;
            printf("%*s%s/\n",depth,"",dent->d_name) ;
            list_func(dent->d_name,depth+4) ;
        }else
           printf("%*s%s\n",depth,"",dent->d_name);        
     }
    chdir("..");
    closedir(pDirHandle);
}
int main(int argc,char**argv)
{   
    if(argc<2)
    {
        printf("Param Format:  listdir path\n");
        return ;

    }
    char*pDirPath=argv[1];
    int depath=0;
    printf("List Begin:\n");
    list_func(pDirPath,depath) ;
    printf("List End.\n");
    return 0 ;
}

格式化错误代码

/*************************************************************************
	> File Name: errformat.c
	> Author: 
	> Mail: 
	> Created Time: Fri 13 Feb 2015 12:50:00 AM PST
 ************************************************************************/

#include<stdio.h>
#include<errno.h>
#include<stdlib.h>
#include<string.h>
int main()
{  
    char* message=NULL ;
    //error
    fopen("aaaaa","r")  ;
    // printf(strerror(errno));
    message=strerror(errno);
    if(message!=NULL)
        printf("Error:%s\n",message);
    perror("Program:");

    return 0;
}






目录
相关文章
|
2月前
|
Linux
Linux下使用ls查看文件颜色全部为白色的解决方法,以及Linux中文件颜色介绍
Linux下使用ls查看文件颜色全部为白色的解决方法,以及Linux中文件颜色介绍
123 2
|
2月前
|
缓存 安全 Linux
Linux 五种IO模型
Linux 五种IO模型
|
18天前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
31 2
|
18天前
|
网络协议 Java Linux
高并发编程必备知识IO多路复用技术select,poll讲解
高并发编程必备知识IO多路复用技术select,poll讲解
|
2月前
|
Java 数据处理
Java IO 接口(Input)究竟隐藏着怎样的神秘用法?快来一探究竟,解锁高效编程新境界!
【8月更文挑战第22天】Java的输入输出(IO)操作至关重要,它支持从多种来源读取数据,如文件、网络等。常用输入流包括`FileInputStream`,适用于按字节读取文件;结合`BufferedInputStream`可提升读取效率。此外,通过`Socket`和相关输入流,还能实现网络数据读取。合理选用这些流能有效支持程序的数据处理需求。
31 2
|
2月前
|
Linux 数据安全/隐私保护 Perl
解锁Linux高手秘籍:文件操作+命令解析大揭秘,面试场上让你光芒万丈,技术实力惊艳四座!
【8月更文挑战第5天】Linux作为服务器与嵌入式系统的基石,其文件管理和命令行操作是技术人员必备技能。本文从文件操作和基础命令两大方面,深入浅出地解析Linux核心要义,助你在面试中脱颖而出。首先探索文件系统的树状结构及操作,包括使用`ls -la`浏览文件详情、`touch`创建文件、`rm -r`慎删目录、`cp`与`mv`复制移动文件、以及利用`find`搜索文件。接着掌握命令行技巧,如用`cat`、`more`和`less`查看文件内容;借助`grep`、`sed`与`awk`处理文本;运用`ps`、`top`和`kill`管理进程;并通过`chmod`和`chown`管理文件权限。
67 8
|
2月前
|
Linux
在Linux中,ls命令有哪些常用的选项?
在Linux中,ls命令有哪些常用的选项?
|
2月前
|
小程序 Linux 开发者
Linux之缓冲区与C库IO函数简单模拟
通过上述编程实例,可以对Linux系统中缓冲区和C库IO函数如何提高文件读写效率有了一个基本的了解。开发者需要根据应用程序的具体需求来选择合适的IO策略。
26 0
|
2月前
|
存储 IDE Linux
Linux源码阅读笔记14-IO体系结构与访问设备
Linux源码阅读笔记14-IO体系结构与访问设备
|
3月前
|
Linux 数据处理 C语言
【Linux】基础IO----系统文件IO & 文件描述符fd & 重定向(下)
【Linux】基础IO----系统文件IO & 文件描述符fd & 重定向(下)
60 0