UNIX系统编程小结(二)

一.对linux的安全机制的一点感悟

各种权限,read,write,execute,set-user-ID,set-group-ID,sticky bit,对目录的权限,对文件的权限,用于保证系统安全的各种组合技,各种经典。比如,如果我们想unlink一个文件,就必须拥有该文件所在目录的write与execute的权限。

二.两个小例子

1.当文件有hole时,cp命令会同时拷贝这些hole为'\0'。这里是一个实现了拷贝时跳过文件hole的程序。ps:我用的buffer是一个字节的,效率很低,但如果用大的buffer就会使得hole被移除,使得原先分开的字符被连上。我没想好如何解决这个问题。如果您知道,请您告诉小弟我,非常感谢!

相关阅读:

UNIX系统编程小结(一)------文件I/O

Unix/Linux编程实践教程【高清PDF中文版+附录光盘+代码】:

#include <apue.h> 
#include <my_error.h> 
#include <fcntl.h> 
 
int main() 

    char buf[1]; 
    int fd,fd_to; 
    int n; 
    if( (fd=open("temp_in_hole",O_RDWR) )<0) 
        err_sys("error open"); 
    if( (fd_to=open("temp_OUT_hole",O_WRONLY))<0 ) 
        err_sys("error open for "); 
    while( (n=read(fd,buf,1))!=0 ) 
    { 
        if(buf[0]!='\0') 
            if(write(fd_to,buf,1)!=n) 
                err_sys("error write"); 
    } 
    close(fd); 
    close(fd_to); 
    return 0; 

2.遍历目录。这里只贴出主要代码:  ps:有一个技巧就是每遇到一个目录时,就用chdir将该目录设置为当前的工作目录,可以提高程序运行的效率。

static int dopath(Myfunc * func) 

    struct stat    statbuf; 
    struct dirent  *dirp; 
    DIR            *dp; 
    int            ret; 
    char          *ptr; 
 
    if(lstat(fullpath,&statbuf)<0) 
        return (func(fullpath,&statbuf,FTW_NS)); 
    if(S_ISDIR(statbuf.st_mode)==0) 
        return (func(fullpath,&statbuf,FTW_F)); 
 
    if( (ret=func(fullpath,&statbuf,FTW_D))!=0 ) 
        return ret; 
 
    ptr=fullpath+strlen(fullpath); 
    *ptr++='/'; 
    *ptr=0; 
 
    if(chdir(fullpath)<0) 
        err_ret("chdir for %s failed!",fullpath); 
    if((dp=opendir("./"))==NULL) 
        return (func(fullpath,&statbuf,FTW_DNR)); 
    while((dirp=readdir(dp))!=NULL) 
    { 
        if(strcmp(dirp->d_name,".")==0 || strcmp(dirp->d_name,"..")==0) 
            continue; 
        strcpy(ptr,dirp->d_name); 
        if(ret=dopath(func)!=0) 
            return ret; 
    } 
    ptr[-1]=0; 
    if(closedir(dp)<0) 
        err_ret("can't close directory %s",fullpath); 
    if(chdir("../")<0) 
        err_ret("chdir for ../ failed!"); 
    return ret; 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/08fe7282040ac2c591b8c21cceaab22c.html