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;
}






目录
相关文章
|
10月前
|
安全 Linux iOS开发
Nessus Professional 10.10 Auto Installer for RHEL 10, AlmaLinux 10, Rocky Linux 10 - Nessus 自动化安装程序
Nessus Professional 10.10 Auto Installer for RHEL 10, AlmaLinux 10, Rocky Linux 10 - Nessus 自动化安装程序
650 6
Nessus Professional 10.10 Auto Installer for RHEL 10, AlmaLinux 10, Rocky Linux 10 - Nessus 自动化安装程序
|
安全 算法 Ubuntu
Linux(openssl)环境:编程控制让证书自签的技巧。
总结:在Linux环境中,OpenSSL是一个非常实用的工具,可以帮助我们轻松地生成自签名证书。通过上述三个简单步骤,即可为内部网络、测试环境或开发环境创建自签名证书。但在公共访问场景下,建议购买经过权威认证机构签发的证书,以避免安全警告。
754 13
|
存储 网络协议 Linux
【Linux】进程IO|系统调用|open|write|文件描述符fd|封装|理解一切皆文件
本文详细介绍了Linux中的进程IO与系统调用,包括 `open`、`write`、`read`和 `close`函数及其用法,解释了文件描述符(fd)的概念,并深入探讨了Linux中的“一切皆文件”思想。这种设计极大地简化了系统编程,使得处理不同类型的IO设备变得更加一致和简单。通过本文的学习,您应该能够更好地理解和应用Linux中的进程IO操作,提高系统编程的效率和能力。
784 34
|
Linux
Linux编程: 在业务线程中注册和处理Linux信号
通过本文,您可以了解如何在业务线程中注册和处理Linux信号。正确处理信号可以提高程序的健壮性和稳定性。希望这些内容能帮助您更好地理解和应用Linux信号处理机制。
342 26
|
JavaScript Ubuntu Linux
如何在阿里云的linux上搭建Node.js编程环境?
本指南介绍如何在阿里云Linux服务器(Ubuntu/CentOS)上搭建Node.js环境,包含两种安装方式:包管理器快速安装和NVM多版本管理。同时覆盖全局npm工具配置、应用部署示例(如Express服务)、PM2持久化运行、阿里云安全组设置及外部访问验证等步骤,助你完成开发与生产环境的搭建。
|
Linux
Linux编程: 在业务线程中注册和处理Linux信号
本文详细介绍了如何在Linux中通过在业务线程中注册和处理信号。我们讨论了信号的基本概念,并通过完整的代码示例展示了在业务线程中注册和处理信号的方法。通过正确地使用信号处理机制,可以提高程序的健壮性和响应能力。希望本文能帮助您更好地理解和应用Linux信号处理,提高开发效率和代码质量。
361 17
|
11月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
1056 1
二、Linux文本处理与文件操作核心命令