更具体地说:我想从程序内部找到这些信息,最好是在它开始交换之前,以便我能做出反应.到目前为止,我发现:
里面的信息/proc,这不是很有用
mincore 系统调用似乎可以在linux和bsd上使用,但要求我传入我感兴趣的所有页面(可能已经足够了,但它有点乏味)
还有什么想法吗?
在最近的Linux内核上,将文件或文件子集复制到另一个文件的最快方法是使用非常好的splice系统调用.该系统使内核能够(几乎)直接管理传输,而无需将数据复制到用户区内存.
现在,我有兴趣为其他系统找到类似的东西,特别是Windows和BSD/MacOS X(我愿意在Obj-C中编写一些代码,在不太可能的情况下,有一个API无法从原始C访问).
谢谢
注意我假设Windows下最快的完整文件副本是CopyFile.但是只复制一个文件范围呢?
注意 我正在处理对性能敏感的代码,它应该适用于各种大容量存储设备(即从Android智能手机到NFS挂载).当然,我愿意为不同的操作系统编写不同的实现.
注意目前,我使用spliceLinux下的Linux/Android copyfile,CopyFile在Windows 下的BSD/Mac OS X 下,并在文件中回退到read/ write用于范围.
我正在寻找Mac OS和BSD上的功能,它等同于Linux sched_getcpu()和Windows' GetCurrentProcessorNumberEx(),以便为cpu本地存储实现库.显然可以使用cpuid或rdtscp指令来模拟它,但是可以通过内核协作做得更好:https://lkml.org/lkml/2007/1/6/190 .
我已经知道线程的当前CPU可能会在我使用信息时发生变化.
用于将数字地址转换为二进制映像符号的 atos 二进制文件是否可以在 Linux(特别是 Ubuntu)上使用?它似乎只能在 OS X 上使用。
我不确定为什么这两个代码块给出不同的输出:
unsigned int seed1 = 0;
char state1[256];
initstate(seed1, state1, 256);
printf("%10ld\n", random());
printf("%10ld\n", random());
// Gives:
// 1216130483
// 1950449197
Run Code Online (Sandbox Code Playgroud)
与
unsigned int seed1 = 0;
char state1[256];
initstate(seed1, state1, 256);
printf("%10ld\n", random());
setstate(state1);
printf("%10ld\n", random());
// Gives:
// 1216130483
// 625602885
Run Code Online (Sandbox Code Playgroud)
我误解了setstate()的作用吗?
编辑:有趣的是,看看它给出了什么:
unsigned int seed1 = 0;
char state1[256];
initstate(seed1, state1, 256);
printf("%10ld\n", random());
setstate(state1);
setstate(state1);
printf("%10ld\n", random());
// Gives:
// 1216130483
// 1950449197
Run Code Online (Sandbox Code Playgroud) 我有一些适合我的代码,但是当我把它交给一些同事时,它就破了.他们正在使用,tcsh而据我所知,我正在使用csh.
我试过了:
csh -v
csh --version
csh -V
csh --help
csh -h
Run Code Online (Sandbox Code Playgroud)
没有成功(他们都只是带我直接到翻译提示).我也为字符串"version"找到了man页面,但我也没有想出任何有用的东西.有没有办法确定csh我安装的版本?
- 编辑 -
在符号链接之后/bin/csh,它们似乎终止,/bin/bsd-csh这似乎意味着我正在使用一些BSD风味的csh shell,如果这有助于任何人.另外,我正在使用ubuntu linux.
我一直在寻找一个不适合嵌入式系统并且不使用许多流行发行版中的许多 GNU 实用程序的 Linux 发行版。我想开发一个(宠物项目)Linux 发行版,它使用 musl-libc、bsd userland 和用户空间的 Plan 9。在我开始并可能浪费时间做不可能的事情之前,使用 BSD 用户区作为 GNU coreutils 的替代品是否可行/实用?如果没有,有什么替代方案?
如果文件以uuid开头,我想删除文件夹中所有文件的第一行,所以我有一个sed看起来像这样的工作命令:
$ sed -i '' '/^uuid/d' *
哪个工作正常,并删除所有以uuid开头的行.
现在我想通过仅删除第一行来改进脚本,如果它以uuid开头,因为一些文件有多个uuid:s并且只应删除第一行的那一行.所以现在我改进了命令,看起来像这样:
$ sed -i '' '1{/^uuid/d;}' *
现在这个命令也可以工作但只能在文件夹中的第一个文件上,即使我运行一个简单的(只是删除第一行)版本,如:
$ sed -i '' '1d' *
它仍然只影响第一个文件.
为什么是这样?
我在Mac上(所以我已经理解了sed的BSD版本),我也尝试通过Brew安装gnu-sed版本$ brew install gnu-sed --with-default-names,没有运气.
我已经阅读了sed - 25个例子来删除文件中的行或模式, sed - 20个例子来删除/删除文件中的字符和googled sed删除文件中的第一行
更新1:正如john1024的评论中提出的,我已经使用该-s选项进行了测试,但不确定如何使用它.
$ sed -s '1d' ./*
sed: illegal option -- s
当我检查man sed我可以找到-s & --seperate选项,所以我必须在这里做错事.
更新2:好的,进展...... find . -iname …
我开始阅读 POSIX 标准,我非常感谢基本原理部分,因为它们帮助我理解(并记住)设计。当我来到“跟踪”系统界面部分时,我看到它被标记为过时,但我找不到任何原因。仅仅是因为没有人实施它吗?是否有任何关于此更改背后原因的公开文件?
http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_11
我遇到这种情况,一个名为“ git”的真实文件夹被符号链接到.githooks:
有没有一种方法可以使符号链接文件不可写,而不影响原始文件?我不希望用户不小心修改.githooks文件夹中git文件夹中的源。
我试过了:
chmod -R .githooks/* 555
Run Code Online (Sandbox Code Playgroud)
和
chmod -R .githooks/* 544
Run Code Online (Sandbox Code Playgroud)
我两次都得到了这个:
chmod: Invalid file mode: .githooks/pre-commit
Run Code Online (Sandbox Code Playgroud)