Articles of c + +

编码WAV文件提前切断

在我之前的问题,我设法得到一个工作的.wav文件作为输出。 但是,当我把这个.wav文件放到我的编码器(用其他.wav文件进行testing并且工作正常)的时候,我的编码器在完成之前把错误传回给我。 这是我的输出: $ ./capture 2 Capture device is plughw:1,0 Finished writing to /tmp/filevXDDX6.wav Starting encode to /tmp/filevXDDX6.flac Wrote 3641 bytes, 4096/88200 samples, 2/22 frames Wrote 6132 bytes, 8192/88200 samples, 2/22 frames Wrote 8748 bytes, 12288/88200 samples, 3/22 frames Wrote 11253 bytes, 16384/88200 samples, 4/22 frames Wrote 13697 bytes, 20480/88200 samples, 5/22 frames Wrote 16222 […]

Wavefront OBJparsing – 为什么我不断获取不正确的数据作为输出?

我正在编写Wavefront .OBJ网格分析器。 虽然我一直在研究这个问题已经有三个星期了,但是我决定重写它的大部分内容,因为我正在逐个字符地parsing它(我觉得最后引入了太多的复杂性,无论如何都不能正常工作)。 现在我一直在逐行parsing,我觉得我的结果越来越差。 以下是我的输出示例: ( STREAM ):# cube.obj } (LINE 2){ ( STREAM ):# } (LINE 3){ ( STREAM ): } (LINE 4){ ( STREAM ):g cube } (LINE 5){ ( STREAM ): } (LINE 6){ ( VERTEX: 1 )'-597028128851671121920.000000 0.000000 -597118763794171953152.000000' ( STREAM ):v 0.0 0.0 0.0 } (LINE 7){ ( VERTEX: 2 […]

在自定义的linux shell中pipe道

试图实现我自己的Linux shell有一些基本的function,当然是时候实现pipe道的问题。 更具体的pipe道工作大部分,尽pipe似乎放弃了最后一个论点。 例如,如果我要运行命令 ps ax | grep ps grep命令之后的ps放在我的shell中。 所以不要像使用典型的Linux shell那样输出 339 ? S 0:00 upstart-udev-bridge –daemon 497 ? Ss 0:00 /usr/sbin/cupsd -F 503 ? S< 0:00 [kpsmoused] 720 ? S 0:00 upstart-socket-bridge –daemon 5541 pts/0 R+ 0:00 ps ax 5542 pts/0 S+ 0:00 grep –colour=auto ps 你明白了 339 ? S 0:00 upstart-udev-bridge –daemon […]

在Unix中结束两个报警信号并计数SIGINT

#include <iostream> #include <unistd.h> #include <stdio.h> #include <signal.h> using namespace std; int count = 0; void alarm2(int signo) { cout << count; } void alarm1(int signo) { signal(SIGALRM, alarm2); cout << "ctrl+C"; alarm(10); sleep(10); } int main() { signal(SIGALRM, alarm1); alarm(3); sleep(5); } 我想3秒钟后,我得到消息“ctrl + C”,然后另一个闹钟设置为10秒; 之后,我应该得到count的价值。 但是当我在10秒后运行时,我得到了“ctrl + C”和count 。

共享内存使用信号量进行安全写入

下面的Server代码把一个string转换成共享内存variables。 客户端代码显示共享内存中可用的string。 完整的代码: 可在这个github链接 Server.c int main(int argc, char *argv[]) { /* code to create posix shared memory and posix named semaphore */ /* critical section start */ snprintf(shared_msg->content, MAX_MSG_LENGTH, "%s", argv[1]); /* critical section end */ } Client.c int main(int argc, char *argv[]) { /* code to open posix shared memory and posix named […]

如何在Linux上部署C ++应用程序

我的C ++应用程序依赖于GCC,MongoDB C ++驱动程序和Boost。 我目前的做法是保持操作系统的一致性。 我在Ubuntu 12.04 64位桌面上开发C ++,并将其部署到Ubuntu 12.04 64位服务器上。 另外,我应该在目标服务器上安装相同版本的依赖项。 但是,如果我想在Ubuntu 13.04上开发我的C ++应用程序,并使用最新的Boost,MongoDB驱动程序和GCC 4.8.1,可以很容易地在Ubuntu 12.04服务器上部署C ++应用程序。 静态链接 dynamic链接,还部署所有的依赖关系到目标服务器? 哪一种方法很简单? 有时,我无法在目标服务器上编译库。

Linux:当退出父进程退出分叉subprocess

我正在用C编写一个程序。程序在启动时执行一次fork() 。 当父进程退出时,让subprocess死掉的最好方法是什么(没有显式的父进程惩罚subprocess)? 例如,如果我发送一个SIGTERM到父进程,孩子不会退出。

最大连接sockets数量与SO_SNDBUF和SO_RCVBUF的值

我在一台Linux机器上有超过三百万个文件描述符,所以我看看socket缓冲区大小与RAM大小的关系会限制机器可以处理的同时tcp连接的最大数量。 如果您有类似的经验,请告知。 谢谢。

当一个线程locking一个大地图时如何避免冻结其他线程

如何避免冻结其他线程试图访问当前线程正在locking的地图? 见下面的代码: //pseudo code std::map<string, CSomeClass* > gBigMap; void AccessMapForWriting(string aString){ pthread_mutex_lock(&MapLock); CSomeClass* obj = gBigMap[aString]; if (obj){ gBigMap.erase(aString); delete obj; obj = NULL; } pthread_mutex_unlock(&MapLock); } void AccessMapForReading(string aString){ pthread_mutex_lock(&MapLock); CSomeClass* obj = gBigMap[aString]; //below code consumes much time //sometimes it even sleeps for milliseconds if (obj){ obj->TimeConsumingOperation(); } pthread_mutex_unlock(&MapLock); } //other threads will […]

通过RS485通讯

我有一个单板计算机通过RS485连接到另一个设备。 计算机应向设备发送请求并接收响应(使用设备相关协议)。 我可以发送消息没有任何问题,设备接收它们(例如,我可以更改设备的参数)。 当我想从设备读取参数时,就会出现问题。 在这种情况下,我收到错误的回应(错误的字符,转移的消息,不完整的消息,…)。 这是我的初始化代码: Bool SerialCommunicator::initPort() { if (isInitialized_) return true; if (!paramSet()) return false; bzero( &termIO_, sizeof ( struct termios )); termIO_.c_iflag |= IGNBRK | IGNPAR; termIO_.c_cflag |= CREAD | CLOCAL; termIO_.c_cflag |= CS8; termIO_.c_oflag |= 0; termIO_.c_lflag |= 0; termIO_.c_cc[VTIME] = 0; termIO_.c_cc[VMIN] = 13; // number of frame characters String […]