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_fdif(-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;}//创建文件存取bufchar 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);}//手动刷新stdoutfflush(stderr);//恢复stderrdup2(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;
}