C语言实现Linux下的ls命令。
来源:互联网 发布:mac chrome json 插件 编辑:程序博客网 时间:2024/05/22 12:14
对于C语言来说,我的水平不是很高,但一下的代码都是我亲自动手在Linux环境下跑过的。希望能让大家满意!
#include <stdio.h>
#include <dirent.h>
#include <sys/types.h>
#include <dirent.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#include <pwd.h>
#include <grp.h>
#include <time.h>
#define IFMT (p.st_mode & S_IFMT)
#define RUSR (p.st_mode & S_IRUSR)
#define WUSR (p.st_mode & S_IWUSR)
#define XUSR (p.st_mode & S_IXUSR)
#define RGRP (p.st_mode & S_IRGRP)
#define WGRP (p.st_mode & S_IWGRP)
#define XGRP (p.st_mode & S_IXGRP)
#define ROTH (p.st_mode & S_IROTH)
#define WOTH (p.st_mode & S_IWOTH)
#define XOTH (p.st_mode & S_IXOTH)
void S_IG(struct stat p);
void S_IS(struct stat p);
void S_IO(struct stat p);
void passwd_uid(int uid);
void group_uid(int gid);
void st_tm(time_t *q);
void type(struct stat p);
int main(int argc ,char *argv[])
{
struct stat p;
struct dirent *s;
DIR *m;
if(argc < 2){
m = opendir(".");
while((s = readdir(m)) != NULL){
if(s->d_name[0] != '.'){
printf("%-7s",s->d_name);
}
}
printf("\n");
}
if(argc == 2){
m = opendir(".");
if(strcmp(argv[1],"-a") == 0){
while((s = readdir(m)) != NULL){
printf("%-7s",s->d_name);
}
printf("\n");
}
else if(strcmp(argv[1],"-l") == 0){
while((s = readdir(m)) != NULL){
if(stat(s->d_name,&p) == -1){
fprintf(stderr, "%s\n", strerror(errno));
}
else{
if(s->d_name[0] != '.'){
type(p);
S_IS(p);
S_IG(p);
S_IO(p);
printf("%2d",p.st_nlink);
passwd_uid(p.st_uid);
group_uid(p.st_gid);
printf("%6ld",p.st_size);
st_tm(&p.st_mtime);
printf("%7s\n",s->d_name);
}
}
}
}
else{
m = opendir(argv[1]);
if(opendir == NULL){
fprintf(stderr, "open file %s:%s\n",argv[1],strerror(errno));
exit(1);
}
while((s = readdir(m)) != NULL){
if(s->d_name[0] != '.'){
printf("%-7s",s->d_name);
}
}
printf("\n");
}
}
closedir(m);
return 0;
}
void type(struct stat p)
{
if(S_ISREG(IFMT)){
printf("-");
}
if(S_ISDIR(IFMT)){
printf("d");
}
if(S_ISCHR(IFMT)){
printf("c");
}
if(S_ISBLK(IFMT)){
printf("b");
}
}
void S_IS(struct stat p)
{
if(S_IRUSR == RUSR){
printf("r");
}
else
printf("-");
if(WUSR == S_IWUSR){
printf("w");
}
else
printf("-");
if(XUSR == S_IXUSR){
printf("x");
}
else
printf("-");
}
void S_IG(struct stat p)
{
if(S_IRGRP == RGRP){
printf("r");
}
else
printf("-");
if(WGRP == S_IWGRP){
printf("w");
}
else
printf("-");
if(XGRP == S_IXGRP){
printf("x");
}
else
printf("-");
}
void S_IO(struct stat p)
{
if(S_IROTH == ROTH){
printf("r");
}
else
printf("-");
if(WOTH == S_IWOTH){
printf("w");
}
else
printf("-");
if(XOTH == S_IXOTH){
printf("x");
}
else
printf("-");
}
void passwd_uid(int uid){
struct passwd *q;
q = getpwuid(uid);
printf("%8s",q->pw_name);
}
void group_uid(int gid){
struct group *q;
q = getgrgid(gid);
printf("%8s",q->gr_name);
}
void st_tm(time_t *q){
struct tm *tm;
char str[100];
tm = gmtime(q);
strftime(str,100,"%F %R ",tm);
printf("%20s",str);
}
- C语言实现Linux下的ls命令。
- C语言实现的linux下ls命令
- C语言实现的linux下ls命令
- Linux下的ls命令详解以及C语言实现
- 在Linux下:用 C 语言实现 ls 命令
- Linux下用C语言实现ls -l的功能
- 命令ls的C语言实现
- C语言实现ls命令
- Linux下ls命令的实现
- Linux下ls命令的简单实现
- 实现Linux下的ls命令
- 实现linux下的ls命令
- linux c实现ls命令
- 用c语言在Linux上实现ls命令
- 用c语言实现Linux命令ls操作
- Linux ls -l命令 用C语言实现
- Linux下ls命令实现
- C 语言的编写的windows下 类似linux 的 ls(list) 命令.
- ubuntu 8.04 + Eclipse 下安装测试 libcurl 全过程
- 委托
- java学习笔记-类型篇
- 容错机制
- java网络编程二:服务器处理多个用户请求的解决方案(返回多个用户输入的信息)
- C语言实现Linux下的ls命令。
- Fatal error: Call to undefined function get_magic_quotes_gpc() 解决方案
- 实现了当移近按钮的时候,按钮显现外发光的特效,用WPF实现比较容易。
- [转贴]虚拟化时记忆体管理:AMD NPT/Intel EPT简介--转自沈洁转自某港澳台同胞
- Winform menu 获取下拉菜单
- 索引器
- Response.Redirect(): Server.Transfer Server.Execute
- 2011年11月1日(梁)
- 一个当了爹的程序员的自白