小编Mic*_*hne的帖子

如何检测何时重定向输出?

我有一个用C编写的Win32应用程序,可以通过printf()将其控制台输出重定向到日志文件.

如果我有我的应用程序会很好.检测是否已启动或不启用重定向'>'.

有任何想法吗?

winapi redirect console-application

9
推荐指数
1
解决办法
1844
查看次数

任何人都有一个很好的C++共享内存容器?

我一直渴望得到一个STLish容器,我可以放入共享内存段或内存映射文件中.

我已经考虑使用自定义分配器和placement new将常规STL容器放入共享内存段.(像这篇ddj 文章).问题是STL容器内部会有指向他们拥有的内存的指针.因此,如果共享内存段或内存映射文件加载到不同的基址(可能在后续运行或第二个进程中),则内部指针突然无效.据我所知,自定义分配器方法只有在您始终可以将内存段映射到同一地址的进程时才有效.至少对于内存映射文件,我有很多经验,如果你只是让系统将它映射到感觉就好的地方.

我对如何做到这一点有一些想法,但如果其他人已经完成了这项工作,那我就想避免它(那就是我,懒惰).

我目前正在退出讨论,因为最好的锁定策略是高度依赖于应用程序的.

c++ stl shared-memory

8
推荐指数
1
解决办法
6707
查看次数

套接字关闭时,UDP套接字上的select不会结束 - 我做错了什么?

我正在研究Linux系统(具有2.6.20内核的Ubuntu 7.04服务器).

我有一个程序,它有一个线程(thread1)等待选择一个UDP套接字变得可读.我正在使用select(使用我的套接字作为单个readfd和单个exceptfd)而不是仅仅调用recvfrom,因为我想要超时.

从另一个线程,我关闭并关闭套接字.如果我在recvfrom中阻塞thread1时执行此操作,则recvfrom将立即终止.如果我执行此操作而thread1在超时的select中被阻止,则select不会立即终止,但最终会正常超时.

任何人都可以告诉我为什么选择不会在套接字关闭后立即退出?这不是一个例外吗?我可以看到它不可读的地方(很明显),但它已经关闭,这似乎是例外的.

这是套接字的开头(为了简单起见,删除了所有错误处理):

m_sockfd = socket(PF_INET, SOCK_DGRAM, 0);
struct sockaddr_in si_me;
memset((char *) &si_me, 0, sizeof(si_me));
si_me.sin_family = AF_INET;
si_me.sin_port = htons(port);
si_me.sin_addr.s_addr = htonl(INADDR_ANY);
if (bind(m_sockfd, (struct sockaddr *)(&si_me), sizeof(si_me)) < 0)
{
// deal with error
}
Run Code Online (Sandbox Code Playgroud)

这是thread1执行的select语句:

struct timeval to;
to.tv_sec = timeout_ms/1000;// just the seconds portion
to.tv_usec = (timeout_ms%1000)*1000;// just the milliseconds 
                                    // converted to microseconds

// watch our one fd for readability or
// exceptions.
fd_set  readfds, exceptfds;
FD_ZERO(&readfds);
FD_SET(m_sockfd, &readfds);
FD_ZERO(&exceptfds); …
Run Code Online (Sandbox Code Playgroud)

c unix sockets network-programming

8
推荐指数
1
解决办法
6253
查看次数

我需要一个TCP选项(ioctl)来立即发送数据

我有一个不寻常的情况:我在嵌入式情况下使用Linux系统(英特尔盒子,当前使用2.6.20内核.),它必须与具有部分损坏的TCP实现的嵌入式系统通信.就像我现在所知,他们希望我们的每条消息都来自一个单独的以太网帧!当消息在以太网帧中分离时,它们似乎有问题.

我们在设备的本地网络上,我们之间没有路由器(只是一个交换机).

当然,我们试图强迫他们修复他们的系统,但这可能最终不可行.

我已经在我的套接字上设置了TCP_NODELAY(我连接到它们),但这只有在我不尝试一次发送多条消息时才有用.如果我连续有几个传出消息,那些消息往往会在一个或两个以太网帧中结束,这会导致另一个系统出现问题.

我通常可以通过使用计时器来避免问题,以避免过于靠近地发送消息,但这显然限制了我们的吞吐量.此外,如果我把时间调低得太低,我冒着网络拥塞的风险,阻止数据包传输并最终允许我的多条消息进入同一个数据包.

有什么方法可以判断驱动程序是否有数据排队?有什么方法可以强制驱动程序在独立的传输层数据包中发送独立的写入调用?我已经查看了socket(7)和tcp(7)手册页,但我没有找到任何内容.可能只是因为我不知道我在寻找什么.

显然,UDP将是一条出路,但同样,我认为我们不能在这一点上让对方做出任何改变.

任何帮助非常感谢.

linux embedded tcp

7
推荐指数
1
解决办法
6005
查看次数

glibc的'-lmcheck'选项和多线程

我们一直在尝试在多线程C++应用程序中寻找一些堆损坏问题.作为一种技术,我们尝试将-lmcheck添加到应用程序的库行.这导致应用程序以相对较短的顺序崩溃,显然存在堆损坏.

我们的应用程序确实使用malloc/free和new/delete(视情况而定).

我们的一个团队想知道-lmcheck实际上是否是线程安全的,并且在所有malloc/free调用之间放置了一个mutex.崩溃消失了.

有谁知道-lmcheck是否应该支持多线程?我想知道我们是否只是误解了我们试图使用的工具,从而导致我们不必要的担忧.

c++ multithreading glibc

7
推荐指数
1
解决办法
2416
查看次数

预订完成后(cURL,iFrame ......?)在外部网站上检索信息

我正在研究一个具有挑战性的问题:在预订过程之后找到获取数据的解决方案.基本上,我有一个带有表单(SLIM FORM)的页面,我需要自动填写来自提供者表单的信息(例如easyjet.com或hotels.com,基本上是任何预订网站).例如:https://secure.booking.com/hotel/es/royal.html?sid = 1c2bab12a0c64a541728840f52cd6401 ;errorc_checkin_invalid=checkin; errorc_intro_error_message_invalid=intro_error_message;errorv_stage=1;errorv_checkin=2011-07-05;errorv_hotel_id=90228;errorv_installment_count = 1; errorv_hostname = www.booking.com; errorv_nr_rooms_9022801_80638194_0 = 1; errorv_interval = 1我的预订中的信息是我需要的.

在此输入图像描述

我做了一些测试,这是我发现的,现在:

不可能在同一页面上同时使用两者,因为使用cURL时,没有与外部服务器的通信,并且使用iframe,它会使页面尽快离开iframe的src更改.

因此,我决定预订流程应在专用页面上,在预订提供商的域中进行(easyjet.com ...)

1)我是否有权考虑在真实网站上进行预订,或者是否有办法将外部网站包含在我的页面上并执行整个预订过程(基本上填写出发时的表格,到达日期等... )?

如果不可能,我用cURL做了一些测试并得出了这样的结论:

_我将不得不为每个提供商定义适当的正则表达式,我的印象是有些人有识别cURL并阻止它的机制.(例如lufthansa.com)但它与其他人(booking.com)的效果相当不错

我有两个额外的问题:

2)是否有比cURL更好的解决方案来解析页面中的某些HTML(特别是因为如果URL不包含sessionID,它不起作用)?我在考虑使用像Selenium这样的东西...

3)如何在其他选项卡或窗口上触发cURL解析?(我在考虑一个类似于可以触发一些JavaScript代码的书签的系统)

谢谢你的答案和对不起的长度:-)

更新:根据我收到的答案,这里有新的想法:对于大型供应商(easyjet,hotels.com等...),如果可用,我将使用API​​.对于小型提供商(例如http://www.hotel-gare-clermont.com/en,1,6217.html),我认为代理解决方案值得另外一个,我不会收到任何有关法律问题的投诉. "Hotel de la Gare",同时为那些小型供应商增添了知名度.你怎么看?

javascript php iframe curl

6
推荐指数
2
解决办法
1687
查看次数

RecyclerView滚动条滞后

当我使用新的回收器视图时,我注意到滚动条不像常规ScrollView/ListView那样流畅.在适配器项目中滚动时,它似乎无法识别,但只有在新项目出现/旧项目消失时才会更改,因此进度条会跳转而不是平滑移动.这是一个展示此问题的视频.有没有办法使它顺利?

我的布局:

<android.support.v7.widget.RecyclerView
                android:id="@+id/listRecycler"
                android:scrollbars="vertical"
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>
Run Code Online (Sandbox Code Playgroud)

分段:

    mListRecycler.setAdapter(mAdapter);
    LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
    layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    mListRecycler.setLayoutManager(layoutManager);
Run Code Online (Sandbox Code Playgroud)

适配器:

public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.ViewHolder> {

private List<News> items;
private int itemLayout;

public NewsAdapter(List<News> items, int itemLayout) {
    this.items = items;
    this.itemLayout = itemLayout;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(itemLayout, parent, false);
    v.setOnClickListener(this);
    return new ViewHolder(v);
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    News item = items.get(position);
    holder.text.setText(item.getTitle());
    holder.itemView.setTag(item);
} …
Run Code Online (Sandbox Code Playgroud)

android scrollbar android-recyclerview

6
推荐指数
1
解决办法
5340
查看次数

为什么为我的服务创建的文件设置只读属性(有时)?

注意:这是对这个问题的完全重写。我之前曾将一些 ACL 问题与我正在寻找的问题混为一谈,这可能就是没有答案的原因。

我有一个 Windows 服务,它使用标准的打开/关闭/写入例程来写入日志文件(它从管道读取内容并将其填充到日志中)。每天午夜打开一个新的日志文件。系统是Windows XP Embedded。

该服务作为本地系统服务运行(用户为 NULL 的 CreateService)。

当服务最初启动时,它会创建一个日志文件并毫无问题地写入其中。此时一切正常,您可以毫无问题地重新启动服务(或计算机)。

但是,在午夜(当天更改时),该服务会创建一个新的日志文件并写入其中。有趣的是,这个新的日志文件设置了“只读”标志。这是一个问题,因为如果服务(或计算机)重新启动,服务将无法再打开文件进行写入。

以下是已经发生问题的系统的相关信息:

 Directory of C:\bbbaudit

09/16/2009  12:00 AM    <DIR>          .
09/16/2009  12:00 AM    <DIR>          ..
09/16/2009  12:00 AM               437 AU090915.ADX
09/16/2009  12:00 AM                62 AU090916.ADX

attrib c:\bbbaudit\*
A          C:\bbbaudit\AU090915.ADX <-- old log file (before midnight)
A    R     C:\bbbaudit\AU090916.ADX <-- new log file (after midnight)

cacls output:
C:\ BUILTIN\Administrators:(OI)(CI)F 
    NT AUTHORITY\SYSTEM:(OI)(CI)F 
    CREATOR OWNER:(OI)(CI)(IO)F 
    BUILTIN\Users:(OI)(CI)R 
    BUILTIN\Users:(CI)(special access:)
                      FILE_APPEND_DATA

    BUILTIN\Users:(CI)(IO)(special access:)
                          FILE_WRITE_DATA

    Everyone:R 

C:\bbbaudit BUILTIN\Administrators:(OI)(CI)F 
            NT AUTHORITY\SYSTEM:(OI)(CI)F 
            CFN3\Administrator:F 
            CREATOR OWNER:(OI)(CI)(IO)F …
Run Code Online (Sandbox Code Playgroud)

windows acl

3
推荐指数
1
解决办法
882
查看次数

转出try块是否合法?

我有一些代码,我从一个非常聪明的人那里继承,他们喜欢使用gotos离开try块,完全跳过catch块.

它确实有效,我怀疑这是合法的(我认为C++标准说在退出作用域时,所有内容都得到了适当的清理,我认为这适用于编译器必须做的任何事情来在我的平台上实现异常) .

这真的合法吗?这不是我写过的东西(太聪明了一半),但它显然有效,我只是想明白为什么这样做.

c++ standards

3
推荐指数
3
解决办法
2533
查看次数

努力添加模糊事件监听器

我正在工作的网站上有一个搜索框,并希望跟踪人们正在寻找的搜索字词。

由于搜索框会自动猜测并输入用户正在搜索的内容,因此没有点击事件。

在控制台中,当发生模糊时,我想要的textContent是以下内容的.textContent:

myVar = document.querySelectorAll('.twitter-typeahead > span')[2]
Run Code Online (Sandbox Code Playgroud)

但是,仅当有人实际键入内容时,此处返回的值才不是null。因此,附加模糊事件似乎是可行的方法。在另一个论坛上某人的帮助下,我在控制台中看到了以下内容:

myVar.addEventListener('blur', function(){dataLayer.push({'event':'bla'})})
Run Code Online (Sandbox Code Playgroud)

在控制台中键入所有内容之后,我看不到任何值被推送到dataLayer,这使我认为blur事件不起作用(与dataLayer.push函数相对)。

有关搜索框的页面在此处

我如何将模糊事件附加到使搜索框失去焦点的人?

javascript blur data-layers onblur google-tag-manager

3
推荐指数
1
解决办法
8821
查看次数