小编Rav*_*pta的帖子

来自stdin的read()

考虑以下代码行:

while((n = read(STDIN_FILENO, buff, BUFSIZ)) > 0)
Run Code Online (Sandbox Code Playgroud)

根据我的理解,read/write函数是非缓冲I/O的一部分.那么这意味着read()每次调用stdio时函数只能读取一个字符吗?或者换句话说,n的值将是

    -1  in case of error
n =  0  in case of EOF
     1  otherwise
Run Code Online (Sandbox Code Playgroud)

如果不是这种情况,上述read()功能何时会返回?为什么?

注意:我也在考虑read()等到它成功读取BUFSIZstdin中的字符数.但是,在一个案例中可以读取的字符数小于BUFSIZ?将永远等待或直到EOF到达(Ctrl + D在unix或Ctrl + ZWindows上)?

另外,让我们说BUFSIZ = 100stdin = ACtrl+D(即EOF紧跟一个字符后).现在while loop迭代的次数是多少次?

c unix linux io

16
推荐指数
3
解决办法
6万
查看次数

为什么C中的双精度是8字节对齐?

我正在阅读一篇关于内存中数据类型对齐的文章(这里),我无法理解一点,即

请注意,双变量将在32位机器上的8字节边界上分配,并且需要两个存储器读取周期.在64位机器上,根据存储体的数量,双变量将在8字节边界上分配,并且只需要一个存储器读周期.

我的疑问是:为什么需要在8字节边界上分配双变量而不是4字节?如果它仍然分配在4字节边界上,我们只需要2个存储器读周期(在32位机器上).如果我错了,请纠正我.

如果有人有一个关于成员/内存对齐的好教程,请分享.

c memory-alignment 32bit-64bit

16
推荐指数
1
解决办法
6284
查看次数

将DMA缓冲区映射到用户空间

我正在linux-2.6.26上编写设备驱动程序.我希望将dma缓冲区映射到用户空间,以便将数据从驱动程序发送到用户空间应用程序.请提供一些很好的教程.

谢谢

c linux linux-device-driver linux-kernel

11
推荐指数
3
解决办法
2万
查看次数

在C中定义包含不可打印字符的常量字符串

我想在C中定义一个包含不可打印字符的常量字符串.例如 - 假设我有一个字符串

char str1[] ={0x01, 0x05, 0x0A, 0x15};
Run Code Online (Sandbox Code Playgroud)

现在我想像这样定义它

char *str2 = "<??>"
Run Code Online (Sandbox Code Playgroud)

我应该写<??>什么来定义一个相当于的字符串str1

c

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

复制具有多个参数的构造函数

我正在学习C++,正在从中读取复制构造函数C++: The Complete Reference.书上写着

允许复制构造函数具有其他参数,只要它们具有为其定义的默认参数即可.但是,在所有情况下,第一个参数必须是对执行初始化的对象的引用.

但我很困惑,我们将如何通过这些额外的参数?我相信应该有一些方法没有在书中给出,我无法弄清楚.谁能帮我吗?

编辑: 也可以在所有三种情况下传递这些额外的参数,即

  • 当一个对象显式初始化另一个对象时,例如在声明中
  • 当使对象的副本传递给函数时
  • 生成临时对象时(最常见的是作为返回值)

c++ copy-constructor

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

检查两个数字是否相互排列?

给定两个数字a,b使得1 <= a,b <= 10000000000(10 ^ 10).我的问题是检查它们中的数字是否是彼此的排列.这样做的最快方法是什么?我想到使用散列但无法找到任何合适的散列函数.有什么建议?

例如 - 123是312的有效排列

另外,我不想对数字中的数字进行排序.

c c++ performance

8
推荐指数
2
解决办法
7234
查看次数

创建一个包含单个字符串N的列表<string>

有没有办法构建一个List<string>包含单个字符串的类型列表N而不使用循环?类似的东西,String(char c, int count)但代替字符串列表.

List<string> list = new List<string>() { "str", "str", "str", ..... N times };
Run Code Online (Sandbox Code Playgroud)

.net c#

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

实现自己的sizeof

可能重复:
不使用sizeof的数据类型的大小

我的一位朋友最近出现在NVIDIA的采访中,他被要求参加implement his own sizeof in C.我试图在练习中做同样的事情,并成功写出两个不同的定义,sizeof其中一个可以处理变量,其他可以处理数据类型,但我无法合并这两个.有没有办法这样做?此外,是否可以sizeof在C中实现完整.

处理类型,如int,char

#define my_sizeof(type) ((size_t)(((type *)0) + 1))
Run Code Online (Sandbox Code Playgroud)

处理变量之类的 x

#define my_sizeof(var) (size_t)((char *)(&var+1)-(char*)(&var))
Run Code Online (Sandbox Code Playgroud)

c

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

为什么二元搜索树?

我正在读二叉搜索树,并且在想我们为什么需要BST呢?据我所知,所有的事情也可以使用简单的排序数组来实现.例如 - 为了构建具有n个元素的BST,我们需要n*O(log n)时间,即O(nlog n)查找时间O(log n).但是这个东西也可以用数组来实现.我们可以有一个排序数组(需要O(nlog n)时间),查找时间也O(log n)就是二进制搜索算法.那为什么我们需要另一个数据结构呢?是否有其他使用/应用BST使它们如此特别?

--Ravi

binary-tree binary-search-tree data-structures

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

如何从字节数组中删除BOM

我的xml数据byte[] byteArray可能包含或不包含BOM.C#中是否有任何标准方法可以从中删除BOM?如果没有,那么处理包括所有类型编码在内的所有情况的最佳方法是什么呢?

实际上,我正在修复代码中的错误,我不想更改大部分代码.所以如果有人能给我删除BOM的代码会更好.

我知道我可以这样做,找出60哪个是'<'的ASCII值并在此之前忽略字节,但我不想那样做.

.net c# byte-order-mark

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