Articles of 语言不可知

创build未刷新的文件输出缓冲区

我正在尝试清除在Linux上运行的几种程序中使用不同语言的未刷新文件I / O缓冲区时出现的问题。 冲洗缓冲区的解决scheme是很容易的,但这个无刷新缓冲区的问题发生得非常随机。 我不想就可能导致的原因寻求帮助,而是关心如何创造(复制)和诊断这种情况。 这导致了一个由两部分组成的问题: 人为地和容易地构build一个例子,在给定的时间内,可以有已知的输出缓冲区不被刷新的情况是否可行? 我的search是空的。 一个微不足道的基准就是在尝试从另一个进程写入大量数据的同时,在一个进程中锤击硬盘(例如交换)。 虽然这个“有效”,但它使系统实际上无法使用:我不能戳,看看发生了什么事。 Linux内部是否有可以识别给定进程已经清除文件输出缓冲区的命令? 这是可以在命令行运行的东西,还是有必要直接查询内核? 我一直在看fsync , sync , ioctl , flush , bdflush等等。 但是,缺乏创build未刷新缓冲区的方法,目前还不清楚这些可能会显示什么。 为了复制他人,C中的#1例子将是非常好的,但问题是真正的语言不可知论 – 只要知道创build这种情况的方法将有助于我正在工作的其他语言。 更新1:我对任何混淆道歉。 正如有几个人指出的,缓冲区可以在内核空间或用户空间中。 这有助于查明问题:我们正在创build大的脏内核缓冲区。 这个区别和答案完全解决了#1:现在似乎很清楚如何在用户空间或内核空间中重新创build未刷新的缓冲区。 但是,识别哪个进程ID具有脏内核缓冲区还不清楚。

在Linux上运行可执行文件最安全的方法是什么?

我试图运行一个程序从一个未知来源的C代码编译。 我想确保程序不会伤害我的系统。 例如,程序可能有类似system("rm -rf /")的源代码,除非代码被彻底检查,否则这是不可检测的。 我想到了以下两种方法 在像VMWare这样的虚拟机内运行它 在linux上构build一个Windows EXE文件,然后在wine上运行 两者都不是非常优雅的解决scheme,我不能自动化他们。 而且在1的情况下,可能会损害虚拟机。 任何帮助,将不胜感激。 我想用我们可以称之为“沙箱”的方式运行程序。

Windows中用户configuration文件的唯一标识符

对于客户端/服务器应用程序,我需要集中存储通常进入用户configuration文件目录的部分configuration信息。 客户端应用程序在首次使用时将具有GUID的文件或registry项写入当前configuration文件。 此GUID随后将用作服务器上configuration数据库中的一个键。 现在我想知道如果Windows用户configuration文件已经有我可以使用的唯一标识符,而不是生成我自己的GUID。 用户名将不起作用,因为用户可能有多个configuration文件。 将它与计算机名称组合将不起作用,因为可能存在漫游configuration文件。 更新: 我只是在同一个域中的两台计算机上的HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProfileList查看SID。 漫游未启用,因此我的用户帐户在每台计算机上都有单独的configuration文件。 两个configuration文件都列出了相同的SID。 这意味着我必须继续生成我自己的GUID。

从DllMain调用LoadLibrary

MSDN说: 它不能调用LoadLibrary或LoadLibraryEx函数(或调用这些函数的函数),因为这可能会在DLL加载顺序中创build依赖关系循环。 这可能会导致在系统执行初始化代码之前使用DLL。 我试图从DllMain调用LoadLibrary并没有发生任何事情。 我看到的唯一问题是,在我的DllMain执行之前,加载的DLL将在我的DLL中使用函数。 为什么我不能在DllMain中调用LoadLibrary? 编辑: 好吧,我意识到,我不能仅仅因为我必须相信其他信徒所做的MSDN(我在那里看到一些错误的东西,但我也应该忘记它们),所以我不能在DllMain中调用LoadLibrary。 而且因为在Windows的新版本中可能会发生一些事情(虽然过去十年没有任何改变)。 但是,任何人都可以显示一个代码,将重现一些不好的事情,当在DllMain中调用LoadLibrary时会发生什么? 在任何现有的Windows操作系统? 不只是在另一个单独的初始化函数调用,但LoadLibrary在DllMain?

你将如何开始自动化我的工作?

在我的新工作中,我们销售import的东西。 为了能够销售这些东西,目前以下的事情需要发生每一个来件货物: 发票到达,电子邮件附件的forms,Excel电子表格 Monkey打开发票,将三列的相关部分复制粘贴到电子表格模板的相关部分,在这里进行极其复杂的计算,如=B2*550 猴子发送这个新的电子表格给老板(如果幸运,电子邮件,否则打印机),谁设置零售价格 猴子打开答复,然后继续input数据到生产数据库使用客户端程序是不可用的这么多级别甚至不值得详述 猴子启动超级terminal,键入“AT”,断开连接 猴子一次一个地使用可怕客户端程序的另一部分向客户发送短信和电子邮件 我想把Monkey从我自己换成软件。 我从来没有写过任何与电子邮件,Excel,数据库或短信接口的东西,但是如果能够帮我解决这个问题 ,我会非常乐意学习。 这是我没有受过教育的心愿: 猴子问雷鸟(邮件服务器也许?)的附件 猴子告诉Excel将电子表格转储成Jurily友好格式,比如CSV或其他东西 猴子分析输出,做复杂的计算 猴子用网页forms发送给老板的链接,在那里他可以设置价格 Monkey连接到数据库,插入数据 猴子Spams costumers 这一切都可行吗? 如果是的话,我从哪里开始阅读? 你将如何改善? 你认为什么语言/框架将是理想的? 你会怎样对待老板?

UNIX与Windows内存释放

我的理解是,在unix中,当内存被释放时,内存不会被返回到操作系统,它留在进程中再次用于下一次调用malloc。 在Windows上,我知道内存实际上被返回到操作系统。 这两种做事方式有没有很大的区别,还是做同一件事情的两种不同方式? 如果这两种方法有什么优点/缺点,它们是什么? 编辑:谢谢澄清。 我一直认为这是一个操作系统的东西(因为在类似UNIX的系统中,进程似乎不会减小,而是在Windows中)。

任何原因使用SecureZeroMemory()而不是memset()或ZeroMemory()时,安全性不是问题?

这个MSND的文章说SecureZeroMemory()是适用于在一段时间内存储在内存中的敏感数据在不再需要时确实被覆盖的情况。 这个问题的答案解释了为什么这可以有所作为。 现在有没有使用SecureZeroMemory()初始化每个内存块的意义? 例如在一个项目中,我看到类似下面的代码: ICONINFO ii; ::SecureZeroMemory(&ii, sizeof(ICONINFO)); if (::GetIconInfo(hIcon, &ii)) { //do stuff, then //release bitmaps if(ii.hbmMask) ::DeleteObject(ii.hbmMask); if(ii.hbmColor) ::DeleteObject(ii.hbmColor); } 为什么在这里使用SecureZeroMemory()而不是ZeroMemory() , memset()或者初始化值? 我的意思是如果编译器决定初始化是不必要的,并希望优化它 – 为什么我会执行它? 有什么理由在这里使用SecureZeroMemory()吗?

在Windows中的桌面之间移动应用程序

我想弄清楚如何发送正在运行的应用程序来执行使用CreateDesktop创build的新Windows桌面。 我可以创build一个新的桌面,然后启动一个应用程序,错误我找不到用正在运行的应用程序的方式。 与桌面pipe理相关的所有function(例如,SetThreadDesktop)总是仅适用于当前线程 任何提示? 谢谢您的回答。 实际上,我需要做的是移动我没有开发的应用程序(即notepad.exe) 如果从Powertoys( http://www.microsoft.com/windowsxp/downloads/powertoys/xppowertoys.mspx )查看Virtual Desktop Manager,它会在同一个WindowStation中创build多个虚拟桌面。 我知道有类似的应用程序可以将运行的应用程序(notepad.exe,calc.exe ..)从一个虚拟桌面移动到另一个虚拟桌面,而无需closures并重新打开它(然后传递新的桌面句柄[HDESK]对CreateProcess的调用),但即使阅读所有相关的MSDN文档,我仍然不知道如何做到这一点: 我也想到了SetProcessWindowStation,但是就我而言,所有使用CreateDesktop函数创build的新虚拟桌面都在同一个WindowStation上,所以… 也许我错过了什么?

NTFS提供了哪些可靠性保证?

我想知道NTFS提供有关存储在其上的数据的可靠性保证? 例如,假设我正在打开一个文件,追加到最后,然后closures它,在这个操作过程中,电源随机熄灭。 我可以find完全损坏的文件? 我问,因为我只是有一个系统locking,发现两个被附加到完全清零的文件。 也就是说,大小正确,但是完全由零字节组成。 我以为这不应该发生在NTFS上,即使事情失败了。

在“控制面板”中添加我自己的应用程序事件 – >声音

我刚刚读过这个问题 ,我真的很喜欢这个问题的答案 。 自然,一个有趣的问题突然出现在我的脑海里。 如何在“控制面板” – >“声音和audio设备” – >“声音” – >“程序事件”中添加我自己的事件(我自己的应用程序) 而另一个相关的问题,我想这里也应该回答是…当我的应用程序中的事件发生时,如何播放控制面板中指定的声音?