• 20165204 第10周课下作业补做


    20165204 第10周课下作业补做

    一、ls的实现

    参考伪代码实现ls的功能,提交代码的编译,运行结果截图。

    代码如下

    #include        <stdio.h>
    #include        <sys/types.h>
    #include        <dirent.h>
    
    void do_ls(char []);
    
    int main(int argc, char *argv[])
    {
            if ( argc == 1 )
                    do_ls( "." );
            else
                    while ( --argc ){
                            printf("%s:
    ", *++argv );
                            do_ls( *argv );
                    }
    
            return 0;
    }
    
    void do_ls( char dirname[] )
    {
            DIR             *dir_ptr;
            struct dirent   *direntp;
    
            if ( ( dir_ptr = opendir( dirname ) ) == NULL )
                    fprintf(stderr,"ls1: cannot open %s
    ", dirname);
            else
            {
                    while ( ( direntp = readdir( dir_ptr ) ) != NULL )
                            printf("%s
    ", direntp->d_name );
                    closedir(dir_ptr);
            }
    }
    

    二、 实现ls -l

    实现ls -l 的功能,提交测试截图和码云代码链接。
    截图如下

    代码如下:

    #include	<stdio.h>
    #include    <string.h>
    #include	<sys/types.h>
    #include	<dirent.h>
    #include	<sys/stat.h>
    
    void do_ls(char[]);
    void dostat(char *);
    void show_file_info( char *, struct stat *);
    void mode_to_letters( int , char [] );
    char *uid_to_name( uid_t );
    char *gid_to_name( gid_t );
    
    int main(int argc, char *argv[])
    {
    	if ( argc == 1 )
    		do_ls( "." );
    	else
    		while ( --argc ){
    			printf("%s:
    ", *++argv );
    			do_ls( *argv );
    		}
    
    	return 0;
    }
    
    void do_ls( char dirname[] )
    {
    	DIR		*dir_ptr;		
    	struct dirent	*direntp;		
    
    	if ( ( dir_ptr = opendir( dirname ) ) == NULL )
    		fprintf(stderr,"ls1: cannot open %s
    ", dirname);
    	else
    	{
    		while ( ( direntp = readdir( dir_ptr ) ) != NULL )
    			dostat( direntp->d_name );
    		closedir(dir_ptr);
    	}
    }
    
    void dostat( char *filename )
    {
    	struct stat info;
    
    	if ( stat(filename, &info) == -1 )		
    		perror( filename );			
    	else					
    		show_file_info( filename, &info );
    }
    
    void show_file_info( char *filename, struct stat *info_p )
    {
    	char	*uid_to_name(), *ctime(), *gid_to_name(), *filemode();
    	void	mode_to_letters();
            char    modestr[11];
    
    	mode_to_letters( info_p->st_mode, modestr );
    
    	printf( "%s"    , modestr );
    	printf( "%4d "  , (int) info_p->st_nlink);	
    	printf( "%-8s " , uid_to_name(info_p->st_uid) );
    	printf( "%-8s " , gid_to_name(info_p->st_gid) );
    	printf( "%8ld " , (long)info_p->st_size);
    	printf( "%.12s ", 4+ctime(&info_p->st_mtime));
    	printf( "%s
    "  , filename );
    
    }
    
    void mode_to_letters( int mode, char str[] )
    {
        strcpy( str, "----------" );           
    
        if ( S_ISDIR(mode) )  str[0] = 'd';    
        if ( S_ISCHR(mode) )  str[0] = 'c';    
        if ( S_ISBLK(mode) )  str[0] = 'b';    
    
        if ( mode & S_IRUSR ) str[1] = 'r';    
        if ( mode & S_IWUSR ) str[2] = 'w';
        if ( mode & S_IXUSR ) str[3] = 'x';
    
        if ( mode & S_IRGRP ) str[4] = 'r';    
        if ( mode & S_IWGRP ) str[5] = 'w';
        if ( mode & S_IXGRP ) str[6] = 'x';
    
        if ( mode & S_IROTH ) str[7] = 'r';    
        if ( mode & S_IWOTH ) str[8] = 'w';
        if ( mode & S_IXOTH ) str[9] = 'x';
    }
    
    #include	<pwd.h>
    
    char *uid_to_name( uid_t uid )
    {
    	struct	passwd *getpwuid(), *pw_ptr;
    	static  char numstr[10];
    
    	if ( ( pw_ptr = getpwuid( uid ) ) == NULL ){
    		sprintf(numstr,"%d", uid);
    		return numstr;
    	}
    	else
    		return pw_ptr->pw_name ;
    }
    
    #include	<grp.h>
    
    char *gid_to_name( gid_t gid )
    {
    	struct group *getgrgid(), *grp_ptr;
    	static  char numstr[10];
    
    	if ( ( grp_ptr = getgrgid(gid) ) == NULL ){
    		sprintf(numstr,"%d", gid);
    		return numstr;
    	}
    	else
    		return grp_ptr->gr_name;
    }
    
  • 相关阅读:
    从开发者角色到产品角色转换
    前端开发做什么?
    最近的前端开发认知总结
    最近的Vue知识总结
    计算机网络
    javascript 字符串加密的几种方法
    JSON数据解析
    JAVA 自定义状态码
    JAVA jdbc获取数据库连接
    JAVA通过md5方法进行加密
  • 原文地址:https://www.cnblogs.com/jph596299009/p/9940349.html
Copyright © 2020-2023  润新知