1:使用 dup2 实现错误日志功能 使用 write 和 read 实现文件的拷贝功能,注意,代码中所有函数后面,紧跟perror输出错误信息,要求这些错误信息重定向到错误日志 err.txt 中
#include <myhead.h>
//文件IO实现文件拷贝
//把错误重定向到err.txt中
int main(int argc, const char *argv[])
{
//创建错误日志文件
int err_fd=open("./err.txt",O_WRONLY|O_CREAT|O_TRUNC|O_APPEND,0664);
if(-1==err_fd){
perror("err_fd open error");
return -1;
}
//为stderr创建备份
int stderr_backup=dup(STDERR_FILENO);
//把stderr重定向到错误日志文件err_fd
if(-1==dup2(err_fd,STDERR_FILENO)){
perror("dup2 error");
return -1;
}
//打开源文件和目标文件完成文件拷贝
int src_fd=open("./ceshi1.bmp",O_RDONLY);
if(-1==src_fd){
perror("src_fd open error");
return -1;
}
int dest_fd=open("./2copy.bmp",O_WRONLY|O_CREAT|O_TRUNC,0664);
if(-1==dest_fd){
perror("dest_fd open error");
return -1;
}
//创建文件存取buf
char buf[128]={0};
while(1){
memset(buf,0,sizeof(buf));
int res=read(src_fd,buf,sizeof(buf));
if(0==res){
break;
}
write(dest_fd,buf,res);
}
//手动刷新stdout
fflush(stderr);
//恢复stderr
dup2(stderr_backup,STDERR_FILENO);
//关闭所有文件
close(err_fd);
close(src_fd);
close(dest_fd);
return 0;
}
2:判断一个文件是否拥有用户可写权限,如果拥有,则去除用户可写权限,如果不拥有,则加上用户可写权限 权限更改函数:就是chmod函数,自己去man一下 要求每一次权限更改成功之后,立刻在终端显示当前文件的权限信息 :使用 ls -l显示(使用 system函数配合shell指令 ls -l 来实现)
#include <myhead.h>
//判断一个文件是否具有用户可写权限
//有则删除,无则添加
//修改后并在终端显示文件信息
int main(int argc, const char *argv[])
{
struct stat buf;
if(-1==stat("./err.txt",&buf)){
perror("stat error");
return -1;
}
mode_t mode=buf.st_mode;
if(mode==(mode|S_IWUSR)){
chmod("./err.txt",mode&(~S_IWUSR));
system("ls -l ./err.txt");
}
else{
chmod("./err.txt",mode|S_IWUSR);
system("ls -l ./err.txt");
}
return 0;
}