我在C中使用UNIX套接字开发服务器。从手册中:
在Linux实现中,文件系统中可见的套接字使用per?所在目录的任务。可以更改其所有者,组和权限。如果进程在创建套接字所在的目录上没有写和搜索(执行)权限,则创建新套接字将失败。连接到套接字对象需要读/写权限。此行为与许多BSD衍生系统不同,后者忽略UNIX域套接字的权限。可移植程序不应依赖此功能来保证安全性。
我有一条世界可写的道路。
$ ls -ld api
drwxrwxrwx 2 root www-data 4096 Feb 15 21:57 api
Run Code Online (Sandbox Code Playgroud)
根目录下的进程在此路径中创建一个套接字:
$ ls -l api/socket
srwxr-xr-x 1 root root 0 Feb 15 21:57 api/socket
Run Code Online (Sandbox Code Playgroud)
由于权限问题,以用户身份运行的另一个进程无法连接到套接字。如果我手动将套接字权限更改为每个人都可写,则其他进程可以成功连接。
我必须实现一个带迭代器的函数.迭代器必须取消引用某个类型,比如int:
template<typename iter>
void f(iter i) {
// do something here ...
int t = *i;
// do something here ...
}
Run Code Online (Sandbox Code Playgroud)
这段代码的问题在于,如果用户调用这样的函数
vector<string> v;
v.push_back("aaa");
f(v.begin());
Run Code Online (Sandbox Code Playgroud)
他会看到错误指向我的代码中的某个位置,而不是他的代码(这会让他感到困惑).我希望错误出现在用户代码中以简化调试.