linux c 文件操作中---记录一些函数

这几天实现ls部分功能时,用到了一些,我觉得值得细究的东西,书上没有详细讲解,那就在这记录下来。

  • __LINE__用来指示本行语句在代码中所处的位置信息,如下:
   #include          





   int main()                 
   {                          
     printf("%d\n",__LINE__);
     printf("%d\n",__LINE__);                                                 
     printf("%d\n",__LINE__);
  };                         

结果为:
这里写图片描述

还可以通过语句#line来重新设定LINE的值,举例如下:
注意:是设定#line 300的紧接着的下一行为为300.

   #include 

   #line 300            //设定下一行的__LINE__ 为300. 



   int main()
   {
      printf("%d\n",__LINE__);
      printf("%d\n",__LINE__);
      printf("%d\n",__LINE__);
   };

结果如下:
这里写图片描述

  • getpwuid与getgrgid函数
    说到这两个函数就先得看两个结构体,如下:
struct passwd  
{  
     char * pw_name; /* Username, POSIX.1 */  
     char * pw_passwd; /* Password */  
     __uid_t pw_uid; /* User ID, POSIX.1 */  
     __gid_t pw_gid; /* Group ID, POSIX.1 */  
     char * pw_gecos; /* Real Name or Comment field */  
     char * pw_dir; /* Home directory, POSIX.1 */  
     char * pw_shell; /* Shell Program, POSIX.1 */  
}; 
struct group
{
    char *gr_name;  /* Group name */
    char *gr_passwd;  /* password */
    __gid_t gr_gid;  /* Group ID */
    char **gr_mem;  /* Member list */
};

(1)getpwuid()函数
通过用户uid查找用户的相关信息,并以passwd的结构体返回其数据.
头文件:

#include   
#include  

函数原型:

struct  passwd *getpwuid(uid_t  uid); 

参数 :文件所有者的uid;
返回值:成功passwd 结构体,uid所对应的用户信息,错误返回空指针。
(2)getgrgid()函数
通过gid,找到该组的相关信息,并以group结构体返回其信息。
头文件:

#include 
#include  

函数原型:

strcut group * getgrgid(gid_t gid);

参数:文件所属组的组id;
返回值:成功返回group结构体,gid对应组的相关信息。错误返回空指针。
代码示例:

   #include
   #include
   #include
   #include
   #include
   #include
   #include

   int main(int argc,char *argv[])
   {    
       struct stat buf;
       //检查参数
       if(argc !=2){
       ┊   printf("%s \n",argv[0]);
       ┊   exit(0);
       }
       if(lstat(argv[1],&buf)==-1){
       ┊   perror("lstat:");
       ┊   exit(1);
       }

       struct passwd *psd;  //从该结构体中获取文件所有者的用户名
       struct group *grp;   //从该结构体中获取文件所有者所属组的组名

       psd = getpwuid(buf.st_uid);
       grp = getgrgid(buf.st_gid);
       printf("文件所有者的信息:\n");
       printf("name:    %s\n",psd->pw_name);
       printf("passwd   %s\n",psd->pw_passwd);
       printf("uid      %d\n",psd->pw_uid);
       printf("gid      %d\n",psd->pw_gid);                                                                                                                                                     
       printf("gecos    %s\n",psd->pw_gecos);
       printf("dir      %s\n",psd->pw_dir);
       printf("shell    %s\n",psd->pw_shell);
       printf("文件所属组的信息:\n");
       printf("group name    %s\n",grp->gr_name);
       printf("group passwd  %s\n",grp->gr_passwd);
       printf("组识别码      %d\n",grp->gr_gid);
       printf("组成员账号    %s\n",*(grp->gr_mem));
   }    

linux c 文件操作中---记录一些函数_第1张图片
en,记这些了。

你可能感兴趣的:(linuxc编程)