Articles of Linux操作系统

在Linux上,access()比stat()更快吗?

我假设access()只是stat()的一个包装,但是我一直在用googlesearch, 发现了一些关于用更便宜的访问调用取代stat调用的轶事 。 假设你只是想检查一个文件是否存在,访问速度更快? 它是完全不同的文件系统?

基于XML Schema的基于智能感知/自动完成的XML编辑器

我正在寻找一个XML编辑器,可以提供基于XML模式的自动完成和validation。 目标平台是Linux,支持Win / OSX,但是可选。 从这个问题我知道这是在Visual Studio中支持。 还有几个支持这个function的商业XML编辑器(oXygen,Liquid XML studio)。 我个人不介意付费的应用程序,但是对于这个例子,我正在向一群用户推荐编辑器,并要求他们支付应用程序的时间不会很长。 有什么build议么? PS我有一个快速刺Komodo编辑但不能自动完成基于自定义模式。 任何提示,以获得这个工作也将有所帮助。 (已解决)评论: 在Eclipse中使用Eclipse XML编辑器和工具插件就像一个魅力。 这个解决scheme在所有目标平台上都有额外的好处。 谢谢@xcut 。 SU上的这个答案表明, Eclipse可以在没有插件的情况下这样做,但我无法复制这个声明。 至于我使用Komodo Edit的尝试,如果创build并注册一个XML目录 ,显然可以这样做。 但是我无法使用XML模式,ActiveState的所有官方文档都只提到了DTD和RelaxNG。

从Linux交叉编译OS X

是否有一个易于使用的工具链从Linux编译达尔文(Mac的操作系统)的代码? 例如,我想在Linux机器上编译libpcap(或tcpdump)并在我的MAC上运行。 我遇到过osxcross但它需要得到Xcode SDK等,有没有人尝试过呢? 谢谢。

C / C ++中的跨平台unicode:使用哪种编码?

我目前正在开发一个应该在Windows和Linux上工作的业余爱好项目(C / C ++),全面支持Unicode。 可悲的是,Windows和Linux使用不同的编码,使我们的生活更加困难。 在我的代码中,我试图尽可能地使用数据,使Windows和Linux都变得简单。 在Windows中,默认情况下,wchar_t被编码为UTF-16,在Linux中被编码为UCS-4(如果我错了,请纠正我的错误)。 我的软件打开({_wfopen,UTF-16,Windows},{fopen,UTF-8,Linux})并将数据写入UTF-8文件。 到目前为止,这都是可行的。 直到我决定使用SQLite。 SQLite的C / C ++接口允许一个或两个字节的编码string( 单击 )。 当然这在Linux中不适用于wchar_t,因为Linux中的wchar_t默认是4字节。 因此,从sqlite的写入和读取需要转换为Linux。 目前,代码在Windows / Linux的例外情况下正在混乱。 我希望坚持在wchar_t中存储数据的标准思想: Windows中的wchar_t:文件path没有问题,读写sqlite没有问题。 无论如何,将数据写入文件应该使用UTF-8。 Linux中的wchar_t:由于UTF-8编码导致的文件pathexception,读/写到sqlite(wchar_t)之前的转换,以及将数据写入文件时的相同。 读完( 在这里 )我确信我应该坚持在Windows中的wchar_t。 但是在完成所有工作之后,麻烦就从移植到Linux开始了。 目前我正在考虑重做这一切,以坚持简单的字符(UTF-8),因为它适用于Windows和Linux,记住,我需要'WideCharToMultiByte'在Windows中的每个string来实现UTF-8。 使用简单的基于char *的string将大大减lessLinux / Windows的例外数量。 你有任何跨平台unicode的经验吗? 任何关于简单地将数据存储在UTF-8而不是使用wchar_t的想法?

在Sh / Bash和php中parsingconfiguration参数的最佳/最简单的方法

我得到了每个PHP项目(大约25!),一些sh脚本,可以帮助我进行部署,回购同步,数据库导出/导出等常规任务。 sh脚本对于我pipe理的所有项目都是相同的,所以必须有一个configuration文件来存储依赖项目的不同参数: # example conf, the sintaxys only needs to be able to have comments and be easy to edit. host=www.host.com administrator_email=guill@company.com password=xxx 我只需要find一个干净的方式,从sh脚本中读取(parsing)这个configuration文件,同时也可以从我的PHP脚本中读取相同的参数。 无需使用XML。 你知道这个好的解决scheme吗? 吉列尔莫

无法写入通过NFS模拟的FIFO文件

我试图写入NFS文件,findNFS挂载,并阻止。 可能是什么问题呢? 我的/ etc / export: /tmp/test/ 10.0.0.0/24(rw,no_root_squash,async) NFS服务器和客户端上的ls / tmp / test是一样的 prw–w–w- 1 root root 0 2009-06-24 17:28 ui-input 我正在写根 谢谢。

在用户空间中实现可取消的系统调用

我正在努力在Linux上实现pthread的取消,而没有任何“不愉快的行为”(有些人可能会说错误)在我的其他一些最近的问题中讨论。 到目前为止,用于pthread取消的Linux / glibc方法一直是将其视为不需要内核支持的方法,并且可以在库级别处理纯粹通过在进行系统调用之前启用asynchronous取消,并恢复先前的取消状态系统调用返回之后。 这至less有两个问题,其中一个非常严重: 取消可以在系统调用从内核空间返回之后,但在用户空间保存返回值之前执行。 如果系统调用分配了资源,这将导致资源泄漏,并且无法使用取消处理程序对其进行修补。 如果在线程在可取消的系统调用中被阻塞时处理信号,则整个信号处理程序在启用asynchronous取消的情况下运行。 这可能是非常危险的,因为信号处理程序可能会调用asynchronous信号安全但不是asynchronous取消安全的函数。 我解决这个问题的第一个想法是设置一个标志,线程是在取消点,而不是启用asynchronous取消,当这个标志被设置,取消信号处理程序检查保存的指令指针,看看它是否指向系统调用指令(arch-specific)。 如果是这样,这表示系统调用没有完成,并将在信号处理程序返回时重新启动,因此我们可以取消。 如果没有,我假定系统调用已经返回,并推迟取消。 但是,还有一个竞争条件 – 可能线程还没有到达系统调用指令,在这种情况下,系统调用可能会阻止并且不会响应取消。 另一个小问题是,如果在input信号处理程序时设置了取消点标志,则从信号处理程序执行的不可取消的系统调用错误地变为可取消。 我正在寻找一种新的方法,并寻找反馈意见。 必须满足的条件: 系统调用完成之前收到的任何取消请求必须在系统调用块之前的任何显着的时间间隔内执行,而不是由于信号处理程序的中断而暂停重启。 系统调用完成后收到的任何取消请求必须推迟到下一个取消点。 我想到的想法需要为可取消的系统调用包装器进行专门的组装。 基本的想法是: 将即将到来的syscall指令的地址推入堆栈。 将堆栈指针存储在线程本地存储器中。 从线程本地存储testing取消标志; 如果设置,则跳转到取消例程。 进行系统调用。 清除保存在线程本地存储中的指针。 取消操作将涉及: 在目标线程的线程本地存储中设置取消标志。 testing目标线程的线程本地存储中的指针; 如果不为空,则向目标线程发送取消信号。 取消信号处理程序将然后: 检查保存的堆栈指针(在信号上下文中)是否等于线程本地存储器中保存的指针。 如果没有,那么取消点就被一个信号处理程序中断了,现在没有什么可做的了。 检查程序计数器寄存器(保存在信号上下文中)是否小于或等于保存在堆栈指针处的地址。 如果是这样,这意味着系统调用还没有完成,我们执行取消。 我现在看到的唯一问题是在信号处理程序的第1步中:如果它决定不采取行动,那么在信号处理程序返回后,线程可能会在系统调用上被阻塞,忽略挂起的取消请求。 为此,我看到两个可能的解决scheme: 在这种情况下,安装一个计时器来传递信号到特定的线程,基本上每一毫秒都会重试,直到我们运气好。 再次提高取消信号,但不取消取消信号,从取消信号处理器返回。 当中断的信号处理程序返回时它会自动取消屏蔽,然后我们可以再试一次。 不过,这可能会干扰信号处理程序中取消点的行为。 任何想法哪种方法最好,或者是否还有其他更重要的缺陷?

如何使用curl从Linux命令行发送数据?

我试图通过无线连接从embedded式Linux设备传输数据。 我有curl和wget在设备上。 如何使用curl或wget将数据传输出设备? 任何指针欢迎。

双显示器设置下的SDL假全屏模式

使用SDL 1.3我想在linux下创build一个假的全屏SDL_Window。 如果我只有一个显示器很容易。 我刚刚获得当前显示模式并创build了一个窗口。 SDL_GetDesktopDisplayMode(0, &mode); SDL_Window *win = SDL_CreateWindow("my window", 0,0,mode.w, mode.h, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN | SDL_WINDOW_BORDERLESS ); 但是,当我有两个显示器,事情变得复杂。 窗口分布在多个显示器上。 SDL只能看到一个双倍大小的虚拟显示器。 我用这个代码testing了它 int num = SDL_GetNumVideoDisplays(); for( int i=0; i < num; i++ ) { SDL_Rect displayRect; SDL_GetDisplayBounds( i, &displayRect ); std::cout << "display " << i << ": x,y,w,h(" << displayRect.x << ", […]

查看上次触摸文件的过程

在一个有一些进程定期更改目录和文件权限的Linux机器上,大致每天。 这不是我设置的过程,我不知道它是什么。 我有根访问权限,我可以很容易地手动更改权限来获取访问权限,但有点烦人。 有没有办法看到上次触摸文件的进程列表? 或者,我该如何去处理文件上的日志过程活动。