1:使用 dup2 实现错误日志功能
使用 write 和 read 实现文件的拷贝功能,注意,代码中所有函数后面,紧跟perror输出错误信息,要求这些错误信息重定向到错误日志 err.txt 中去
int main(int argc, const char *argv[])
{
char buf[64]={0};//先定义一个buf内存
int Rfd = open(argv[1],O_RDONLY);//只读文件
int Wfd = open(argv[2],O_WRONLY | O_CREAT | O_TRUNC,0666);//创建一个可读可写文件
int fd = open("err.txt",O_WRONLY | O_CREAT | O_TRUNC,0666);//创建一个保存错误日志的可读可写文件
if(Rfd == -1 || Wfd == -1)
{ dup2(fd,2);
perror("open");
return 1;
}
int retval = read(Rfd,buf,64);
while(retval != 0)
{
write(Wfd,buf,64);
retval = read(Rfd,buf,64);
}
close(Rfd);
close(Wfd); return 0;
2:判断一个文件是否拥有用户可写权限,如果拥有,则去除用户可写权限,如果不拥有,则加上用户可写权限
权限更改函数:就是chmod函数,自己去man一下
要求每一次权限更改成功之后,立刻在终端显示当前文件的权限信息 :使用 ls -l显示(使用 system函数配合shell指令 ls -l 来实现)
struct stat buf = {0};//定义一个stat结构体变量buf 并初始化
stat(argv[1],&buf);
if(stat(argv[1],&buf)== -1)
{
perror("无法获取文件状态");
return 1;
}
mode_t mode = buf.st_mode;
if((mode | S_IWUSR)== mode)
{
//用户拥有可写权限,去除
mode_t newmode = mode &~ S_IWUSR;
if(chmod(argv[1],newmode)== -1)
{
perror("无法去除用户可写权限");
return 1;
}
printf("%s文件的用户拥有的可写权限已去除\n",argv[1]);
}
else
{
//用户不拥有可写权限,添加
mode_t newmode = mode | S_IWUSR;
if(chmod(argv[1],newmode)== -1)
{
perror("无法添加用户可写权限");
return 1;
}
printf("%s文件的用户可写权限已添加\n",argv[1]);
}
//显示当前文件的权限信息
char command[1024];
snprintf(command,sizeof(command),"ls -l %s",argv[1]);
if(system(command)== -1)
{
perror("无法执行ls命令");
return 1;
}