本文将分享在C中将stdin与select的详细内容,并且还将对一起使用进行详尽解释,此外,我们还将为大家带来关于c–将setvbuf()与STDIN流一起使用、c–自定义迭代器与std::sort一
本文将分享在C中将stdin与select的详细内容,并且还将对一起使用进行详尽解释,此外,我们还将为大家带来关于c – 将setvbuf()与STDIN流一起使用、c – 自定义迭代器与std :: sort一起使用但不与tbb :: parallel_sort一起使用?、c# – 将SqlTransaction与SqlDataReader一起使用、jquery-select2 – 将select2与json数据一起使用,该数据没有一个名为“text”的字段,同时避免复制项目并丢失标准行为的相关知识,希望对你有所帮助。
本文目录一览:- 在C中将stdin与select()一起使用(stdin和stdout用法c语言)
- c – 将setvbuf()与STDIN流一起使用
- c – 自定义迭代器与std :: sort一起使用但不与tbb :: parallel_sort一起使用?
- c# – 将SqlTransaction与SqlDataReader一起使用
- jquery-select2 – 将select2与json数据一起使用,该数据没有一个名为“text”的字段,同时避免复制项目并丢失标准行为
在C中将stdin与select()一起使用(stdin和stdout用法c语言)
我有以下程序:
#include <stdio.h> #define STDIN 0 int main() { fd_set fds; int maxfd; // sd is a UDP socket maxfd = (sd > STDIN)?sd:STDIN; while(1){ FD_ZERO(&fds); FD_SET(sd, &fds); FD_SET(STDIN, &fds); select(maxfd+1, &fds, NULL, NULL, NULL); if (FD_ISSET(STDIN, &fds)){ printf("\nUser input - stdin"); } if (FD_ISSET(sd, &fds)){ // socket code } } }
我面临的问题是,一旦在STDIN上检测到输入,消息“ User input-
stdin”就继续打印…为什么在循环检查哪一个描述符已输入的同时,它一次又不打印一次?
谢谢。
答案1
小编典典该select
功能仅在有可用输入时告诉您。如果您实际上并没有消耗它,那么select将继续直接下降。
c – 将setvbuf()与STDIN流一起使用
我确实找到了一个建议在这里使用setvbuf()的帖子:
Making fgets issue longer read() calls on linux
我仍然很难让这个工作 – 这是我正在努力的代码:
int main(void) { #define MAX_STRING_SIZE 7168 char input_string[MAX_STRING_SIZE]; printf( "Input: " ); setvbuf( stdin,NULL,_IONBF,0 ); fgets( input_string,MAX_STRING_SIZE-1,stdin ); printf( "\n" ); printf( "%s",input_string ); }
有没有人成功增加这个输入缓冲区?
我的环境:Ubuntu 10.10带有build-essential包
谢谢!
解决方法
setvbuf(stdin,_IOFBF,16384);
这会动态分配缓冲区空间.根据具体情况,您可能希望将缓冲区传递给它:
char mybuffer[32768]; setvbuf(stdin,mybuffer,sizeof(mybuffer));
c – 自定义迭代器与std :: sort一起使用但不与tbb :: parallel_sort一起使用?
int main()//needs boost and tbb to compile{ int values_size = 6; int nums1[] = {5,8,7,89,56,4}; int nums2[] = {2,1,4,9,2}; //WORKS! std::sort(do_dual_sort.make_iter(nums1,nums2),do_dual_sort.make_iter(nums1+values_size,nums2+values_size),do_dual_sort.make_comp_desc(nums1,nums2)); //DOESN'T COMPILE tbb::parallel_sort(do_dual_sort.make_iter(nums1,nums2)); for(unsigned int i = 0; i < values_size; i++) cout << "nums1[" << i << "] " << nums1[i] << " | nums2[" << i << "] " << nums2[i] << "\n"; return 0;}class dual_sort{public: template <class T,class T2> struct helper_type { public: typedef boost::tuple<typename iterator_traits<T>::value_type,typename iterator_traits<T2>::value_type> value_type; typedef boost::tuple<typename iterator_traits<T>::value_type&,typename iterator_traits<T2>::value_type&> ref_type; }; template <typename T1,typename T2> class dual_iterator : public boost::iterator_facade<dual_iterator<T1,T2>,typename helper_type<T1,T2>::value_type,boost::random_access_traversal_tag,T2>::ref_type> { public: explicit dual_iterator(T1 iter1,T2 iter2) : mIter1(iter1),mIter2(iter2) {} typedef typename iterator_traits<T1>::difference_type difference_type; private: void increment() { ++mIter1; ++mIter2; } void decrement() { --mIter1; --mIter2; } bool equal(dual_iterator const& other) const { return mIter1 == other.mIter1; } typename helper_type<T1,T2>::ref_type dereference() const { return (typename helper_type<T1,T2>::ref_type(*mIter1,*mIter2)); } difference_type distance_to(dual_iterator const& other) const { return other.mIter1 - mIter1; } void advance(difference_type n) { mIter1 += n; mIter2 += n; } T1 mIter1; T2 mIter2; friend class boost::iterator_core_access; }; template <typename T1,typename T2> dual_iterator<T1,T2> make_iter(T1 t1,T2 t2) { return dual_iterator<T1,T2>(t1,t2); } template <class T1,class T2> struct iter_comp_desc { typedef typename helper_type<T1,T2>::value_type T; bool operator()(const T& t1,const T& t2) const { return get<0>(t1) > get<0>(t2); } bool operator()(const char*& t1,const char*& t2) const { return strcmp(get<0>(t1),get<0>(t2)) == 1; } }; template <class T1,class T2> iter_comp_desc<T1,T2> make_comp_desc(T1 t1,T2 t2) { return iter_comp_desc<T1,T2>(); }} do_dual_sort;
我得到的编译错误是:
error C2512: 'dual_sort::dual_iterator<T1,T2>' : no appropriate default constructor availablewith[ T1=int *,T2=int *]tbb44_20150728oss\include\tbb/parallel_sort.h(201) : see reference to function template instantiation 'void tbb::internal::parallel_quick_sort<RandomAccessIterator,Compare>(RandomAccessIterator,RandomAccessIterator,const Compare &)' being compiledwith[ RandomAccessIterator=dual_sort::dual_iterator<int *,int *>,Compare=dual_sort::iter_comp_desc<int *,int *>]main.cpp(1125) : see reference to function template instantiation 'void tbb::parallel_sort<dual_sort::dual_iterator<T1,dual_sort::iter_comp_desc<T1,T2>>(RandomAccessIterator,const Compare &)' being compiledwith[ T1=int *,T2=int *,RandomAccessIterator=dual_sort::dual_iterator<int *,int *>]
编辑:我使用的编译器是Visual Studio 2012.您可以尝试用std替换一些boost函数以使其在g上工作.
解决方法
因此,您的双迭代器不是有效的RandomAccessIterator.
许多算法仍然有效,但这并不能使您的代码有效.
要求相同并不意味着任何与std :: sort的给定实现一起使用的东西也可以与tbb :: parallel_sort一起使用:std :: sort的给定实现不必强制执行所有要求.标准.
无论文档如何,如果实现不适用于您的代码,它将无法与您的代码一起使用.
最简单的方法可能是在原始数组中创建一对伪索引(或迭代器)数组,然后对其进行排序.你只需要覆盖<正常.
c# – 将SqlTransaction与SqlDataReader一起使用
This sqlTransaction has completed; it is no longer usable.
这是代码
using (sqlConnection locationConnection = new sqlConnection(connectionString)) { locationConnection.open(); sqlTransaction transaction = locationConnection.BeginTransaction(); sqlCommand cmd = new sqlCommand(" Select stuff from table A Insert stuff into table B Delete stuff from table A",locationConnection,transaction); using(sqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { //Doesn't matter } } //Exception happens here transaction.Commit(); }
任何人都可以阐明为什么会这样吗?如果我在sqlDataReader的范围内移动提交,我会得到一个例外,即datareader需要先关闭.
编辑:我已经回答了我的问题,并会在我被允许的情况下尝试记住接受它.
解决方法
jquery-select2 – 将select2与json数据一起使用,该数据没有一个名为“text”的字段,同时避免复制项目并丢失标准行为
>替换标准行为(标记等)
>将我的所有数组推入一个带有文本字段的新数组
> ps:我只想渲染许多没有文本字段的select2项
基本上如果你看到this jsbin,你会看到这样的东西
$("#e10_3").select2({ data:{ results: data,text: function(item) { return item.tag; } },formatSelection: format,formatResult: format });
但是如果我删除了select2的自定义formatSelection和formatResult参数,我就无法使用不同的字段来处理文本.
解决方法
var data = $.map(yourArrayData,function (obj) { obj.text = obj.text || obj.name; // desired field return obj; });
唯一的另一种选择是从一开始就使用与所需属性匹配的文本属性来准备数据.
更新(添加了一个例子)
$('your-select2-el').select2 data: $.map(yourArrayData,(obj) -> obj.text = obj.your_custom_field_name # obj.title or obj.name etc. obj )
请参阅我之前和this one之前提供的链接中的文档
我们今天的关于在C中将stdin与select和一起使用的分享已经告一段落,感谢您的关注,如果您想了解更多关于c – 将setvbuf()与STDIN流一起使用、c – 自定义迭代器与std :: sort一起使用但不与tbb :: parallel_sort一起使用?、c# – 将SqlTransaction与SqlDataReader一起使用、jquery-select2 – 将select2与json数据一起使用,该数据没有一个名为“text”的字段,同时避免复制项目并丢失标准行为的相关信息,请在本站查询。
本文标签: