1. 将指定路径下的文件(不包括隐藏文件)权限及最后一次的访问时间写到file.txt文件中
代码:
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <dirent.h>
#include <time.h>
int main(int argc, const char *argv[])
{
//打开目标txt文件
FILE *fp = fopen("./file.txt", "w+");
if(fp < 0)
{
perror("fopen");
return -1;
}
else
printf("打开文件成功\n");
//打开文件夹
DIR *DP = opendir("../606");
if(NULL == DP)
{
perror("opendir");
return -1;
}
else
printf("文件夹打开成功\n");
struct dirent *RP;
struct stat buf;
struct tm *Inf;
printf("=============================\n");
while(1)
{
RP = readdir(DP); //读取文件夹里的文件
if(NULL == RP)
{
if(0 == errno)
{
printf("文件读取完毕\n");
break;
}
else
{
perror("readdir");
return -1;
}
}
printf("-----------------------");
if(RP->d_name[0] != '.'); //判断是否是隐藏文件
{
if(stat("RP->d_name", &buf) < 0) //获取文件属性
{
perror("stat");
return -1;
}
//获取文件属性写入文件
fprintf(fp, "%d", buf.st_mode);
//获取文件最后一次修改时间并转换成日历,写入文件
Inf = localtime(&buf.st_ctime);
fprintf(fp,"%d年%02d月%02d日%02d时%02d分%02d秒\r", \
Inf->tm_year+1900, Inf->tm_mon+1,\
Inf->tm_mday,Inf->tm_hour,Inf->tm_min,Inf->tm_sec);
}
}
if(closedir(DP) < 0)
{
perror("closedir");
return -1;
}
else
printf("关闭文件夹成功\n");
if(fclose(fp) < 0)
{
perror("fclose");
return -1;
}
else
printf("关闭文件成功\n");
return 0;
}
2.使用文件IO对图片进行拷贝。要求子进程拷贝后半部分,父进程拷贝前半部分。要求拷贝到一个文件中。拷贝完毕后与源文件一致。
代码:
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
int main(int argc, const char *argv[])
{
int mark = open("./7.jpg", O_RDONLY);
if(mark < 0)
{
perror("open");
return -1;
}
int mark1 = open("./77.jpg", O_WRONLY|O_CREAT|O_TRUNC, 0775);
if(mark1 < 0)
{
perror("open");
return -1;
}
off_t res = lseek(mark, 0, SEEK_END);
pid_t pid = fork(); //创建子进程
if(pid > 0)
{
lseek(mark, 0, SEEK_SET);
lseek(mark1, 0, SEEK_SET);
char c;
for(int i=0; i<res/2;i++)
{
read(mark, &c, 1);
write(mark1, &c, 1);
}
}
else if(0 == pid)
{
sleep(1);
lseek(mark, res/2, SEEK_SET);
lseek(mark1, res/2, SEEK_SET);
char c;
for(int i=0; i<res/2;i++)
{
read(mark, &c, 1);
write(mark1, &c, 1);
}
}
else
{
perror("fork");
return -1;
}
close(mark);
close(mark1);
return 0;
}
运行结果: