我想从bash脚本中更改符号链接的目标.问题是符号链接非常重要(/bin/sh
就是这样),我想以时尚的方式做到:
我想到了两种方法.使用普通ln
:
ln -fs /bin/bash /bin/sh
Run Code Online (Sandbox Code Playgroud)
或使用mv
:
ln -s /bin/bash /bin/sh.new
mv /bin/sh.new /bin/sh
Run Code Online (Sandbox Code Playgroud)
哪一个更适合我的需求?是否有可能其中一个会尝试替换符号链接目标而不是符号链接本身?
我正在开发一个顺序写入大文件(并且根本不读取)的应用程序,我想posix_fadvise()
用来优化文件系统行为.
联机帮助页中的功能描述表明最合适的策略是POSIX_FADV_SEQUENTIAL
.但是,Linux实现描述怀疑:
在Linux下,
POSIX_FADV_NORMAL
将预读窗口设置为后备设备的默认大小;POSIX_FADV_SEQUENTIAL
将此大小加倍,并POSIX_FADV_RANDOM
完全禁用文件预读.
因为我只是在写数据(可能也会覆盖文件),所以我不希望有任何预告.我应该坚持使用POSIX_FADV_SEQUENTIAL
或更确切地说使用POSIX_FADV_RANDOM
它来禁用它吗?
其他选项怎么样,比如POSIX_FADV_NOREUSE
?或者根本不posix_fadvise()
用于写作?
我可以假设对于任何类型T
,类型std::list<T>
将具有相同的,恒定的大小?只是为了说清楚,我的意思是'main'类型本身的大小,而不是它分配的内存.
假设我自己的大小T
只会影响使用分配器分配的列表节点的大小,这似乎是合乎逻辑的.
但是,有两件事可能会导致sizeof(std::list<T>)
我能想到的变量:
std::list
通过将一些T
实例放入std::list<T>
自身来"优化" 类型.这对我来说似乎是一个坏主意,它可能打破了标准所要求的"恒定时间"要求;std::list<T>
某些类型的库特化,具有不同大小的特化.我想不出(1)或(2)的任何用途,但我可能错了.
我想要实现的是使用固定大小的切片分配器来使用std::list<T>
内部的模板类.
作为注释:这是关于不同类型的差异T
,而不是针对不同的分配器.我将明确控制所有实例化,并且它们都将使用std::allocator
.
我注意到有很多关于浮点计算错误主题的讨论,要求你使用比复杂的更复杂的比较==
.然而,所有这些文章似乎都假设值以某种方式被操纵(或双重计算),而我没有看到一个涵盖非常简单的常量复制的示例.
请考虑以下事项:
const double magical_value = -10;
class Test
{
double _val;
public:
Test()
: _val(magical_value)
{
}
bool is_special()
{
return _val == magical_value;
}
};
Run Code Online (Sandbox Code Playgroud)
据我所知,magical_value
应该在编译时设置,以便在该点进行所有舍入.之后,应该将值复制到类中,并与原始值进行比较.这样的比较是否保证安全?或者可以复制或比较在这里引入错误?
请不要建议替代比较或魔法价值使用方法,这是另一个主题.我只是对这个假设感到好奇.
编辑:请注意,我有点担心在某些体系结构上,优化可能会导致将值复制到不同大小的浮点寄存器,从而引入精确值的差异.有类似的风险吗?
我想知道是否可以margin-left
使用CSS3基于计数器的值设置元素.
换句话说,拥有这样的HTML:
<section>A</section>
<section>B</section>
<section>C</section>
Run Code Online (Sandbox Code Playgroud)
有第一块,有margin-left: 0em
第二块,1em
依此类推.
到目前为止,我尝试过以下方法:
section
{
counter-increment: sect-indent;
margin-left: calc(counter(sect-indent) * 1em);
}
Run Code Online (Sandbox Code Playgroud)
但似乎calc()
不支持获得计数器值.
使用CSS3有可能这样吗?我对涉及ECMAScript的解决方案不感兴趣.
每个人,当在gdb中使用"next"指令时,我发现每行源代码显示两次-----我很确定,这些代码不在任何循环中.这是现象:
(gdb) frame
#0 ap_get_client_block (r=0x8560d48,
buffer=0xb68501b7 "<?xml version=\"1.0\" encoding=\"utf-8\"?><Root><OperCode>SMS101</OperCode><AppId>SMSMsgFilterReq</AppId><Req><UserMobile>13925237429</UserMobile><SendMsg>abc?34¨?23a?07\214?21??237?11??215?10°?214?27??227?07\214??,hao"..., bufsiz=81920) at http_filters.c:1540
1540 if (r->remaining < 0 || (!r->read_chunked && r->remaining == 0)) {
(gdb) n
1544 bb = apr_brigade_create(r->pool, r->connection->bucket_alloc);
(gdb)
1545 if (bb == NULL) {
(gdb)
1544 bb = apr_brigade_create(r->pool, r->connection->bucket_alloc);
(gdb)
1545 if (bb == NULL) {
Run Code Online (Sandbox Code Playgroud)
----- 1544,1545行没有任何循环,但是他们重复了.愿任何人开导我吗?
我正在创建一个仅模板的C++库.但是,我还想提供一个"空"共享库,这样通过控制SONAME,只要模板发生变化,导致实例化模板ABI不兼容,我就能够强制重建模板使用者.
遗憾的是,如果特定用户-Wl,--as-needed
在其中LDFLAGS
,链接器将删除我的共享库,NEEDED
因为已编译的可执行文件不从它请求任何符号.如何确保程序始终链接到我的库,最好不要引入不必要的虚函数调用(或者如果我必须这样做,使它们负担最小)?
编辑:作为注释,特定模板类提供静态方法,通常只使用那些静态方法.因此,依赖构造函数中的任何内容并不是一个好主意,而且我真的希望避免通过某种强制执行来加重所有方法的负担.
受到@EmployedRussian的启发,我实现了:
extern int dummy;
namespace
{
struct G
{
inline G()
{
dummy = 0;
}
};
static const G g;
}
Run Code Online (Sandbox Code Playgroud)
但遗憾的是,对包括头文件在内的每个单元执行一次赋值.
请考虑以下代码段(错误处理故意丢失):
void* foo(const char *path, off_t size) {
int fd;
void *ret;
fd = open(path, O_RDWR);
lockf(fd, F_LOCK, 0);
ret = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
close(fd);
return ret;
}
Run Code Online (Sandbox Code Playgroud)
所以,想法是打开一个文件,mmap()
它只返回数据指针.如果文件也可以在mmap时间锁定,那将会很棒.
每个mmap(3p)
:
mmap()函数应添加对与文件描述符fildes关联的文件的额外引用,该文件描述符fildes不会被该文件描述符上的后续close()删除.当没有更多映射到文件时,应删除此引用.
但是lockf(3p)
:
文件锁应在第一次关闭时通过文件的任何文件描述符的锁定过程释放.
所以,使用lockf()
我必须保持fd打开并在非常长的时间内提供它的参考.是否有更好的可移植方法来确保文件被锁定直到munmap()
被调用?
我刚刚注意到gcc关于位域的一个有趣的属性.如果我创建struct
如下:
template <int N>
struct C
{
unsigned long long data : N;
};
Run Code Online (Sandbox Code Playgroud)
然后在amd64:
sizeof(C) == 8
;sizeof(C) == 4
> , sizeof(C) == 8
.(带sizeof(unsigned long long) == 8
).
这看起来大部分类似于C99/C++ 11,uint_fastXX_t
除了在我的系统上的事实sizeof(uint_fast8_t) == 1
.但是,例如,我无法复制任何类似的东西__int128
(总是导致sizeof(C) == 16
).
在C++ 98中使用前面提到struct
的"穷人"替代品似乎是个好主意吗?uint_fastXX_t
我有一些奇怪的事情要报告。在我新配置的 RHEL5 服务器上,我的 shell 设置为 /bin/bash 我在 .bashrc 中将 umask 设置为 002。
当我第一次登录时,umask 似乎工作正常:
$ touch a
$ ls -l a
-rw-rw-r-- etc.....
Run Code Online (Sandbox Code Playgroud)
如果我创建另一个文件,它可以工作:
$ touch b
$ ls -l b
-rw-rw-r-- etc.....
Run Code Online (Sandbox Code Playgroud)
但是...如果我更改目录(到任何目录),则 umask 将设置回 022:
$ cd /var/www/whatever
$ touch c
$ ls -l c
-rw-r--r-- etc.....
Run Code Online (Sandbox Code Playgroud)
完全奇怪。
有人见过这样的吗?他们能想出什么要检查的吗?
为什么 umask 设置会在 cd'ing 后改变?
谢谢,
-查理