UNIX环境高级编程学习之第四章文件和目录-用C实现Shell中的”ls -l”功能

Linux/Unix C/C++ xiujie 127℃ 0评论 已收录

UNIX环境高级编程学习之第四章文件和目录-用C实现Shell中的”ls -l”功能

// 只能查看目录中的所有文件属性
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
int main(int argc, char *argv[])
{
	char szDirPath[512] = { 0 };
	char szFilePath[512] = { 0 };
	DIR * pDIR;
	if (argc > 1)
	{
		strcpy(szDirPath, argv[1]);
	}else {
		strcpy(szDirPath, ".");	
	}
	pDIR = opendir(szDirPath);
	if (NULL == pDIR)
	{
		printf("Open DIR[%s] Error! /n", szDirPath);
		return -1;
	}
	struct dirent* pdirent;
	int n = 0;
	int i;
	int y;
	char szName[256];
	char szLineData[512];
	struct stat file_stat;
	while ( (pdirent = readdir(pDIR)) != NULL)
	{
		memset(szName, 0, sizeof(szName));
		memset(szLineData, 0, sizeof(szLineData));
		memset(szFilePath, 0, sizeof(szFilePath));
		memset(&file_stat, '/0', sizeof(file_stat));
		strcpy(szName, pdirent->d_name);
		sprintf(szFilePath, "%s/%s", szDirPath, szName);
		stat(szFilePath, &file_stat);	
		time_t t =  file_stat.st_mtime;
		int len = strlen(szName);
		if (pdirent->d_type == DT_DIR) // 文件夹
		{
			szName[len] = '//';
		}else if (pdirent->d_type == DT_DIR) // 符号连接
		{
			szName[len] = '@';
		}	
		sprintf(szLineData, "%-32s uid=%-8u gid=%-8u LastDate=%s ", szName, file_stat.st_uid, file_stat.st_gid, ctime(&t));
		printf(szLineData);	
	} 
	printf("/n");
	closedir(pDIR);
	return 0;
}

喜欢 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址