关于mmapLinux系统中的实现,我有几个问题似乎没有太多记录:
使用时将文件映射到内存时mmap,如何处理预取此类文件中的数据?
也就是当你从mmaped区域读取数据时会发生什么?这些数据是否已移至L1/L2缓存?它是直接从磁盘缓存中读取的吗?prefetchnta相似的ASM指令是否适用于mmaped区域?
实际mmap通话的开销是多少?它是相对于映射数据量还是常量?
希望有人对此有所了解.提前致谢.
今天,看一下手册页open(),我注意到这个函数是'重载':
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
Run Code Online (Sandbox Code Playgroud)
我不认为这是可能的C.实现这个目的的"诀窍"是什么?
LATER EDIT:
所以它并没有真正超载,因为在使用varargs时 - 你只能提供相同类型的多个参数.那么,mode_t幕后是一个int吗?
使用POSIX消息队列或Unix域套接字进行本地IPC通信是否更好?
我曾经在机器之间使用Unix套接字(不是域名),我记得制作和断开连接会导致套接字在最终消失之前停留一段时间.此外,如果您想要"可靠"的交换,您必须使用TCP或设计应用程序以返回ACK.我不确定这是否也适用于Unix域套接字.
在我目前的项目中,我们需要本地IPC.我的第一反应是使用POSIX MQueues,因为我之前使用它们进行本地消息传递.但是,一位同事正在建议使用Unix域套接字.
是一个比另一个更好,还是编程熟悉的问题?或者它可能取决于正在创建的应用程序?
从总体上看,我们正在开发的应用程序遵循客户端/服务器模型.客户端向服务器发送消息以"做某事".但是,客户端不会等待"完成"响应 - 尽管他们确实想知道他们的请求是否已被接收.
发送方的基本逻辑是:
connect to server
send request
note if the send worked or not
disconnect from server
Run Code Online (Sandbox Code Playgroud)
一台服务器可能有数百个客户端.
我们正在运行Linux操作系统的SMP系统(4-8个核心)上执行.
提前致谢.
<ucontext.h>不推荐使用用户线程函数,因为它们使用不推荐的C 函数(它们使用带有空括号的函数声明作为参数).
它们有标准替代品吗?我不认为成熟的线程擅长实现协作线程.
使用utimes,futimes,futimens等,也可以设置一个文件的访问和修改时间戳.
修改时间是文件数据更改的最后时间.同样,"ctime"或更改时间是最后一次更改文件上的属性(如权限).(Linux/POSIX维护三个时间戳:mtime和ctime,已经讨论过,'atime'或访问时间.)
是否有设置更改时间戳的功能?(其中"更改"是属性修改或'ctime',而不是修改时间'mtime'.)(我理解想要更改更改时间戳的循环性质,但想想归档软件 - 确切地恢复文件会很好因为它是.)
创建时间戳是否有任何功能?(我意识到这ext2不支持这个,但我想知道Linux是否支持,对于那些支持它的文件系统.)
如果不可能,那背后的原因是什么呢?
相关问题
如何在C/C++中检测操作系统?
如何在GCC或ANSI C中找出我在运行的操作系统?
我会好的如果我能知道我是否在POSIX上运行.
更新:
无论是在编译时还是在运行时,它对我没有任何影响.我在调试例程中使用它,因此性能并不重要.
我正在寻找路径分隔符.Windows和Unix/Linux/BSD会没事的.
而且,我正在尝试在路径上找到基本名称.我找到了一些解决方案,但解决方案包括许多我不想要的包含.我要修改这个解决方案.
我在Mac OS X 10.4.11上,按照这个URL,我执行并得到以下输出:
mac $ touch myfile.c
mac $ gcc -std=c99 -E -dM myfile.c
#define __DBL_MIN_EXP__ (-1021)
#define __FLT_MIN__ 1.17549435e-38F
#define __CHAR_BIT__ 8
#define __WCHAR_MAX__ 2147483647
#define __DBL_DENORM_MIN__ 4.9406564584124654e-324
#define __FLT_EVAL_METHOD__ 0
#define __DBL_MIN_10_EXP__ (-307)
#define __FINITE_MATH_ONLY__ 0
#define __GNUC_PATCHLEVEL__ 1
#define __SHRT_MAX__ 32767
#define __LDBL_MAX__ 1.79769313486231580793728971405301e+308L
#define __APPLE_CC__ 5367
#define __UINTMAX_TYPE__ long long unsigned int
#define __LDBL_MAX_EXP__ 1024
#define __SCHAR_MAX__ 127
#define __USER_LABEL_PREFIX__ _
#define …Run Code Online (Sandbox Code Playgroud) CLOCK_MONOTONIC似乎不可用,所以clock_gettime已经用完了.
我在某些地方读过,mach_absolute_time()可能是正确的方法,但在阅读之后它是一个'cpu依赖值',它立即让我想知道它是否在下面使用rtdsc.因此,即使它是单调的,该值也可能随时间漂移.此外,线程关联性问题可能会导致调用函数产生有意义的不同结果(使其在所有内核中不是单调的).
当然,这只是猜测.有谁知道mach_absolute_time实际上是如何工作的?我实际上正在寻找clock_gettime的替代品(CLOCK_MONOTONIC ......或类似于OSX的东西.无论时钟源是什么,我都期望至少毫秒精度和毫秒精度.
我只想了解哪些时钟可用,哪些时钟是单调的,如果某些时钟漂移,有线程亲和性问题,所有Mac硬件都不支持,或者执行"超高"数量的cpu周期.
以下是我能够找到关于这个主题的链接(一些已经死链接,但在archive.org上找不到):
https://developer.apple.com/library/mac/#qa/qa1398/_index.html http://www.wand.net.nz/~smr26/wordpress/2009/01/19/monotonic-time-in -mac-os-x / http://www.meandmark.com/timing.pdf
谢谢!布雷特
我正在编写一个跨平台的应用程序,它创建临时文件并将这些文件复制到另一个位置,每个人都需要这些文件.(默认情况下,只有所有者对临时文件具有读访问权.)我尝试使用POSIX文件权限,如下所示:
FileAttribute<Set<PosixFilePermission>> attrs =
PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rw-r--r--"));
Path temp = Files.createTempFile(null, ".tmp", attrs);
Run Code Online (Sandbox Code Playgroud)
但这会导致非POSIX平台出现异常:
java.lang.UnsupportedOperationException: 'posix:permissions' not supported as initial attribute
Run Code Online (Sandbox Code Playgroud)
我想添加一个简单的检查,以便我可以在必要时使用文件权限,而不会破坏与其他平台的兼容性.
wait(null)和wait(&status)c系统编程有什么区别?
指针状态的内容是什么?
POSIX和其他标准对多线程在同一时间执行poll()或select()调用单个套接字或管道句柄的情况有何看法?
如果有任何数据到达,只有一个等待线程被唤醒或所有等待线程被唤醒?