输入任意路径,将该路径下所有文件的详细信息显示出来,类似ls -l。
家目录~:代码不识别, 多试几个路径
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <dirent.h>
#include <errno.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <time.h>
#include <pwd.h>
#include <grp.h>
void get_FilePermssion(mode_t m)
{
int i = 0;
int x = 0400;
while(i < 3)
{
if(m & x)
putchar('r');
else
putchar('-');
x = x>>1;
if(m & x)
putchar('w');
else
putchar('-');
x = x>>1;
if(m & x)
putchar('x');
else
putchar('-');
x = x>>1;
i++;
}
}
char get_fileType(mode_t m)
{
if(S_ISREG(m))
return '-';
else if(S_ISREG(m))
return 'd';
else if(S_ISREG(m))
return 'c';
else if(S_ISREG(m))
return 'b';
else if(S_ISREG(m))
return 'p';
else if(S_ISREG(m))
return 'l';
else if(S_ISREG(m))
return 's';
}
int main(int argc, const char *argv[])
{
//打开
DIR *dp = opendir("../day1/");
if(NULL == dp)
{
perror("opendir");
return -1;
}
struct dirent * readpte = NULL;
while(1)
{
readpte = readdir(dp);
if(NULL == readpte)
{
if(0 == errno)
{
printf("目录读取完毕\n");
break;
}
else
{
perror("readdir");
break;
}
}
if(readpte->d_name[0] != '.')
{
char str[32] = "../day1/";
strcat(str,readpte->d_name);
struct stat buf;
if(stat(str,&buf) < 0)
{
printf("%s\n",readpte->d_name);
perror("stat");
return -1;
}
struct tm *t = NULL;
//文件类型以及文件权限
printf("%c",get_fileType(buf.st_mode));
// printf("mode:%d/n",buf.st_mode);
get_FilePermssion(buf.st_mode);
//文件硬链接数
printf(" %ld",buf.st_nlink);
//用户名y
struct passwd *pwd = getpwuid(buf.st_uid);
if(NULL == pwd)
{
perror("getpwuid");
return -1;
}
printf(" %s",pwd->pw_name);
//用户所属组
struct group *gid = getgrgid(buf.st_gid);
if(NULL == gid)
{
perror("getpwgid");
return -1;
}
printf(" %s",gid->gr_name);
//文件大小
printf("\t%ld\t",buf.st_size);
//文件修改的时间
t = localtime(&buf.st_ctime);
printf("%02d月 %02d",t->tm_mon+1,t->tm_mday);
printf(" %02d:%02d",t->tm_hour,t->tm_min);
//文件名
printf(" %s\n",readpte->d_name);
}
}
//关闭
if(closedir(dp) < 0)
{
perror("closedir");
return -1;
}
return 0;
}
拷贝一张图片,父进程拷贝前半部分,子进程拷贝后半部分。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc, const char *argv[])
{
pid_t cpid = fork();
int fd = open("1.png",O_RDONLY,0444);
if(fd < 0)
{
perror("open");
return -1;
}
int fd1 = open("2.png",O_RDWR | O_APPEND | O_CREAT,0774);
if(fd1 < 0)
{
perror("open");
return -1;
}
char s[1] = "";
int res = 0;
int x = lseek(fd,0,SEEK_END)/2;
lseek(fd,0,SEEK_SET);
int d = 0;
if(0 != cpid)
{
while(d < x)
{
res = read(fd,s,sizeof(s));
write(fd1,s,res);
d++;
}
}
else
{
sleep(1);
lseek(fd,x,SEEK_SET);
while((res = read(fd,s,sizeof(s))) > 0)
{
write(fd1,s,res);
}
}
close(fd);
close(fd1);
return 0;
}