Articles of Linux操作系统

SO_RCVTIME和SO_RCVTIMEO不影响Boost.Asio操作

以下是我的代码 boost::asio::io_service io; boost::asio::ip::tcp::acceptor::reuse_address option(true); boost::asio::ip::tcp::acceptor accept(io); boost::asio::ip::tcp::resolver resolver(io); boost::asio::ip::tcp::resolver::query query("0.0.0.0", "8080"); boost::asio::ip::tcp::endpoint endpoint = *resolver.resolve(query); accept.open(endpoint.protocol()); accept.set_option(option); accept.bind(endpoint); accept.listen(30); boost::asio::ip::tcp::socket ps(io); accept.accept(ps); struct timeval tv; tv.tv_sec = 1; tv.tv_usec = 0; //setsockopt(ps.native(), SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv)); setsockopt(ps.native(), SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)); char buf[1024]; ps.async_receive(boost::asio::buffer(buf, 1024), boost::bind(fun)); io.run(); 当我使用Telnet连接但不发送数据时,它不会从Telnet超时断开连接。将需要做什么使setsockopt踢? 谢谢! 我已经将SO_RCVTIMEO修改为SO_SNDTIMEO。 仍然无法在指定的时间超时

为什么Windows需要为`file_get_contents`命名`utf8_decode`文件名?

如果$filename包含元音变音(ä,ö,ü), file_get_contents($filename)在我的Windows操作系统上不起作用。 通过试验和错误,我发现我需要做file_get_contents(utf8_decode($filename))才能正常工作。 但是,当我把这个活到我的服务器(猜测它是某种Linux)时,它又一次返回了一个错误,所以我删除了utf8_decode并突然发现它工作正常。 作为一个解决方法(所以我不需要手动改变这段代码每次我改变代码)我已经尝试 (mb_detect_encoding($filename, 'UTF-8', true)) ? utf8_decode$filename) : $filename; 因为这已经为相同的问题(相同的问题与utf8_encode )相同的问题,但$filename竟然是在每个(服务器)环境UTF8编码,所以这是行不通的,因为它总是如此。 任何想法如何得到这个在两个系统上工作? (请不要“只是迁移到Linux的PHP开发” – 我有Linux,但ATM我使用Windows的原因有很多) 编辑:问题也出现在fopen和接受的解决scheme也是如此。

关于目录中的单点和双点

每当我们使用这个命令: dir –> in Windows 和 dir -a –> in Unix 我们看到2种点: . .. 出现在目录中。 现在在Stephens Rago的APUE中,它说这些是文件名,有些书上说这些是目录。 无论如何这些点是什么? 如果可能,请提供Windows和Unix的答案。

为什么Linux编译的程序不能在Windows上运行

我几乎可以肯定,我的问题是由于编译的程序编译为一个可执行文件,但我只是想仔细检查这一事实。 #include <stdio.h> #include <stdlib.h> int main() { printf("Hello world!\n"); return EXIT_SUCCESS; } 上面的“程序”应该在Windows和Linux上编译,因为它是源代码兼容的,因为没有操作系统特定的库或类似的东西。 然而,当我在我的Linux机器上input“c99 hello.c -o hello.exe”,然后将这个“可执行文件”传送到Windows机器上时,它拒绝运行。 据我所知,Linux生成一个只能在linux上运行的可执行文件,所以添加“.exe”没有任何作用。 要在Linux for Windows上构build该程序,我需要在Windows机器上重新编译该程序? 还是有另一个更简单的方法,将工作?

内存pipe理与返回字符*function

今天,没有太多的想法,我写了一个简单的函数返回一个char *基于给定枚举值的switch语句。 不过,这让我想知道我该如何释放这些记忆。 我所做的是这样的: char* func() { char* retval = new char[20]; // Switch blah blah – will always return some value other than NULL since default: return retval; } 我很抱歉,如果这是一个天真的问题,但是什么是最好的方式来释放内存看到我不能删除内存后返回,显然,如果我删除它之前,我不会有一个返回值。 我想作为一个可行的解决scheme是这样的 void func(char*& in) { // blah blah switch make it do something } int main() { char* val = new char[20]; func(val); // […]

MinGW在linux上交叉编译

我有一个项目,我想为Windows编译。 我有适当的生成文件,一切工作与g ++。 我运行apt-get install mingw32 ,下载了一个100MB的MB包,但是我找不到如何真正运行它。 没有mingw32可执行文件,也不能在互联网上find任何帮助,那么我如何真正编译它呢?

有大小写敏感的mysqldump问题? WIN->的Linux

当我使用mysqldump转储大写字母的表时,它出现在我的> dump.sql文件中的小写字母。 我在2006年发现了一个报告,差不多4年了http://bugs.mysql.com/bug.php?id=19967 这里的解决schemebuild议让linux不敏感。 如果可能,我宁可不要。 什么是复制一个win32数据库到Linux最简单的方法?

Vim:Mac与Linux ^ M问题

我使用Vim和GIT在Linux / Ubuntu机器上开发我的项目。 在过去,我曾经使用Windows,这意味着行结束是DOS格式。 现在转到Linux后,我总是看到在行结尾的^ M混乱/恼人的字符。 这里有些人: 如何将^ M换行转换为在vim中打开的文件中的“正常”换行符? build议我应该做一个查找/replace或使用像dos2unix工具。 这些都是很好的build议,但是对于一个版本控制的项目来说,这意味着我必须在更改后为这些文件添加不必要的提交,无论如何,这是一项艰巨的任务,不值得花费时间。 所以: 无论如何要让Vim容忍这个? 也就是说,如果该文件是DOS行结束的,它保持这样,并使用新的换行符的格式,等等。

是否有一个多操作系统蓝牙库?

我在一个随意的devise阶段,我有硬件devise和蓝牙通信。 我想用一个程序来支持OSX,Windows和Linux。 我发现bluecove库,但其最后的版本是2008年,所以我不知道是否过时或支持BT 4.0。 最后,如果不可能,那么我想我会为它创build个人解决scheme。 到目前为止,我只find了C#的32feet 。 有什么build议么?

variables的值存储在C中

在以下代码段中: int func() { int a=7; return a; } 代码段中值7存储在可执行文件中吗? 或者它是在数据段还是在代码段? 答案取决于操作系统还是编译器?