问题描述
我正在使用 C++ 和 XCode 创建一个 cmd 行应用程序来保存文件权限,但是我无法识别精子 () 方法,错误是
I'm using C++ and XCode to create a cmd line app to save file permissions, however I can't get the sperm() method to be identified, the error is
'使用未声明的标识符'精子'
我的包含和有问题的代码如下......
My includes and the piece of code in question are below ...
// My includes ...
#include <iostream>
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <string.h>
#include <vector>
#include <sys/stat.h>
#include <dirent.h>
#include <pwd.h>
#include <grp.h>
#include <time.h>
#include <locale.h>
#include <langinfo.h>
#include <stdint.h>
// Code fragment ...
dp = opendir ("/var/someplace");
if (dp != NULL)
{
while ((ep = readdir (dp)))
{
oFile = new FileObject;
oFile->setName( ep->d_name );
oFile->setIsDirectory( ep->d_type == isFolder );
oFiles.push_back (*oFile);
// If it's a folder then we can get it's innards
if (stat(ep->d_name, &statbuf) == -1)
continue;
cout << "%10.10s", sperm(statbuf.st_mode);
iFile++;
}
closedir (dp);
}
else
perror ("Couldn't open the directory");
推荐答案
这可能让我看起来像个变态,但我在谷歌上搜索了精子"(当然只搜索 .h 和 .cpp 文件).坏消息是我找不到任何对它的引用(除了 stat 函数 页面本身).
This might make me look like a pervert, but I searched google for 'sperm' (ofcourse only for .h and .cpp files).The bad news is I can't find any references to it (except on the stat function page itself).
好消息是我发现了 这段 代码定义了它自己的精子"功能:
The good news is I found this piece of code which defines it's own 'sperm' function:
char const * sperm(__mode_t mode) {
static char local_buff[16] = {0};
int i = 0;
// user permissions
if ((mode & S_IRUSR) == S_IRUSR) local_buff[i] = 'r';
else local_buff[i] = '-';
i++;
if ((mode & S_IWUSR) == S_IWUSR) local_buff[i] = 'w';
else local_buff[i] = '-';
i++;
if ((mode & S_IXUSR) == S_IXUSR) local_buff[i] = 'x';
else local_buff[i] = '-';
i++;
// group permissions
if ((mode & S_IRGRP) == S_IRGRP) local_buff[i] = 'r';
else local_buff[i] = '-';
i++;
if ((mode & S_IWGRP) == S_IWGRP) local_buff[i] = 'w';
else local_buff[i] = '-';
i++;
if ((mode & S_IXGRP) == S_IXGRP) local_buff[i] = 'x';
else local_buff[i] = '-';
i++;
// other permissions
if ((mode & S_IROTH) == S_IROTH) local_buff[i] = 'r';
else local_buff[i] = '-';
i++;
if ((mode & S_IWOTH) == S_IWOTH) local_buff[i] = 'w';
else local_buff[i] = '-';
i++;
if ((mode & S_IXOTH) == S_IXOTH) local_buff[i] = 'x';
else local_buff[i] = '-';
return local_buff;
}
用法很简单:
#include <sys/types.h>
#include <sys/stat.h>
#include <iostream>
int main(int argc, char ** argv)
{
std::cout<<sperm(S_IRUSR | S_IXUSR | S_IWGRP | S_IROTH)<<std::endl;
std::cout<<sperm(S_IRUSR)<<std::endl;
std::cout<<sperm(S_IRUSR | S_IRGRP | S_IWOTH | S_IROTH)<<std::endl;
return 0;
}
在 ideone 上的输出:
r-x-w-r--
r--------
r--r--rw-
这篇关于XCode C++ 缺少精子()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!