我看功能,如connect()和bind()用C插座和发现,他们需要一个指向sockaddr结构.我一直在阅读并使你的应用程序独立于AF,使用sockaddr_storage结构指针并将其转换为sockaddr指针是有用的,因为它具有更大的地址所需的额外空间.
我想知道的是,函数connect()和bind()请求sockaddr指针的方法是如何从指针访问数据,指针指向比预期更大的结构.当然,你传递的是你提供它的结构的大小,但是函数用来从指向更大结构的指针获取IP地址的实际语法是struct *sockaddr什么?
这可能是因为我来自OOP语言,但它似乎有点乱,有点乱.
有没有办法为函数提供一个名称,然后返回具有该名称的给定对象上的字段或属性的值?我尝试使用null-coalesce运算符解决它,但显然不喜欢不同的类型(这对我来说也有点奇怪,因为null为null).我可以把它分成如果为空,但必须有一个更好的方法来做到这一点.这是我的函数,带有Comparison对象的两行不能编译,但是我会把它们放在那里以显示我想要做的事情.
private void SortByMemberName<T>(List<T> list, string memberName, bool ascending)
{
Type type = typeof (T);
MemberInfo info = type.GetField(memberName) ?? type.GetProperty(memberName);
if (info == null)
{
throw new Exception("Member name supplied is neither a field nor property of type " + type.FullName);
}
Comparison<T> asc = (t1, t2) => ((IComparable) info.GetValue(t1)).CompareTo(info.GetValue(t2));
Comparison<T> desc = (t1, t2) => ((IComparable) info.GetValue(t2)).CompareTo(info.GetValue(t1));
list.Sort(ascending ? asc : desc);
}
Run Code Online (Sandbox Code Playgroud)
我听说过可以使用的动态linq,但为了学习,我正在按照自己的方式行事.
我是NAudio的新手,我正在尝试编写一个小程序,用于记录麦克风中的一些音频并将其写入Wave文件.当我在程序的Main函数中调用recordStuff()函数时,程序没有通过WaveIn对象的构造,并且程序死于InvalidOperationException,其中包含消息"使用WaveInEvent在后台线程上记录" .知道NAudio的人可能会告诉我这意味着什么吗?我试过在它自己的线程中调用recordStuff()函数,但我最终得到了相同的结果.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NAudio.Wave;
namespace SimpleWave
{
class Recorder
{
public Recorder()
{
writer = new WaveFileWriter("C:\\Users\\Paul\\Desktop\\yeah.wav", new NAudio.Wave.WaveFormat(44100, 1));
}
public static List<byte> buff = new List<byte>();
public static WaveFileWriter writer;
public void recordStuff()
{
// WaveIn Streams for recording
WaveIn waveInStream;
waveInStream = new WaveIn();
waveInStream.DeviceNumber = 0;
waveInStream.WaveFormat = new WaveFormat(44100, 2);
writer = new WaveFileWriter(@"C:\Users\Paul\Desktop\this.wav", waveInStream.WaveFormat);
waveInStream.DataAvailable += new EventHandler<WaveInEventArgs>(waveInStream_DataAvailable);
waveInStream.StartRecording();
}
public void waveInStream_DataAvailable(object sender, WaveInEventArgs e) …Run Code Online (Sandbox Code Playgroud) 我正在进入Windows服务并查看一些教程,但他们都非常愚蠢.它们通常涉及在重写的OnStart方法中打印出一些东西.这听起来好像被称为一次.现在我将把需要连续运行的代码放在哪里?
我正在关注这个Haskell 教程并且在高阶函数部分。它定义了一个名为 chain 的函数:
chain :: (Integral a) => a -> [a]
chain 1 = [1]
chain n
| even n = n:chain (n `div` 2)
| odd n = n:chain (n * 3 + 1)
Run Code Online (Sandbox Code Playgroud)
有一个练习可以找到长度超过 15 的“链”的数量。他们这样做:
numLongChains :: Int
numLongChains = length (filter isLong (map chain [1..100]))
where isLong xs = length xs > 15
Run Code Online (Sandbox Code Playgroud)
我试图提出一个列表理解,而不是给我链的数量,而是给我一个来自 [1..100] 的比 15 长的链列表。到目前为止,我最接近的尝试如下:
[ [ a | a <- chain b, length a > 15] | b <- …Run Code Online (Sandbox Code Playgroud) 我正在读一本关于 c 语言套接字的书,并且正在制作一个非常简单的服务器程序。我逐字复制了代码。目前还没有任何东西尝试连接到该服务器程序,并且已多次更改端口以确保。
程序在第一次循环运行时接受方法失败。根据我在手册页中读到的内容,accept 应该阻止调用者直到建立连接,并且如果队列中没有连接,则不会失败。Accept 是否有任何原因会返回小于 0 的值?我将把代码发布到失败的地方:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
//Max number of outstanding connection requests
#define MAXPEDNING 5
#define NONE
#define BUFSIZE 1024
int main(int argc, char **argv)
{
in_port_t servPort;
#ifdef CMDLINE
if(argc != 2)
{
puts("Error! Usage is <Server Port>");
return 0;
}
servPort = atoi(argv+1);
#endif //CMDLINE
#ifdef NONE
servPort = 2549;
#endif //NONE
int servSock;
if((servSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
{ …Run Code Online (Sandbox Code Playgroud) 我正在读一本书中的C语言中的malloc函数获取您希望作为参数分配的内存的"块"数,并根据您将malloc返回的值转换为多少来确定块的数量.例如,在我的系统上,int是4个字节:
int *pointer;
pointer = (int *)malloc(10);
Run Code Online (Sandbox Code Playgroud)
将分配40个字节,因为编译器知道int是4个字节.
这让我感到困惑有两个原因:
我正在阅读,size参数实际上是你想要分配的字节数,与任何类型的大小无关.
Malloc是一个返回地址的函数.它如何根据从void返回到不同类型的地址的外部强制转换来调整它分配的内存大小?它只是我应该接受的一些编译器魔法吗?
我觉得这本书错了.非常感谢任何帮助或澄清!
这是本书所说的:
char *string;
string = (char *)malloc(80);
Run Code Online (Sandbox Code Playgroud)
80个预留了80块存储空间.块大小由类型转换(char*)设置,这意味着malloc()正在查找80个字符的文本存储.