1:使用dup2实现错误日志功能
使用write 和read 实现文件的拷贝功能,注意,代码中所有函数后面,紧跟perror输出错误信息,要求这些错误信息重定向到错误日志err.txt中去
#include<myhead.h>
int main(int argc, char *argv[])
{
int efd=open("./err.txt",O_RDONLY|O_WRONLY|O_CREAT,0666);
dup2(efd,2);
int rfd=open(argv[1],O_RDONLY,0664);
int sfd=open(argv[2],O_WRONLY|O_TRUNC|O_CREAT,0666);
if(rfd==-1|sfd==-1)
{
perror("open");
return 1;
}
char buf[1024]={0};
int res=read(rfd,buf,sizeof(buf));
if(res==-1)
{
perror("read");
return 1;
}
int end=write(sfd,buf,sizeof(buf));
if(end==-1)
{
perror("write");
return 1;
}
close(rfd);
close(sfd);
close(efd);
return 0;
}
效果图:
输出错误信息:
2:判断一个文件是否拥有用户可写权限,如果拥有,则去除用户可写权限,如果不拥有,则加上用户可写权限
要求每一次权限更改成功之后,立刻在终端显示当前文件的权限信息︰使用ls -l显示(使用system函数配合shell指令ls -l来实现)
#include<myhead.h>
int main(int argc, char *argv[])
{
int rfd=open(argv[1],O_RDONLY);
int res=access(argv[1],W_OK);
if(res==0)
{
int del=chmod(argv[1],-S_IWUSR);
if(del==0)
{
system("ls -l");
printf("用户可写权限除去成功\n");
}else if(del==-1)
{
perror("chmod");
}
}else if(res==-1)
{
int add=chmod(argv[1],S_IWUSR);
if(add==0)
{
system("ls -l");
printf("用户可写权限添加成功\n");
}else if(add==-1)
{
perror("chmod");
}
}
close(rfd);
return 0;
}
效果图: