小编Rec*_*Hou的帖子

Go中的Syscall.RawSyscall()和Syscall.Syscall()的详细信息?

我现在正在阅读包中的源代码syscall,并遇到了一些问题:

因为我是一个完全的小白syscallassembly,所以不要犹豫,分享你知道这件事:)

首先关于func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno):它的参数trap, a1, a2, a3和返回值r1 r2是什么意思?我搜索过文档和网站,但似乎缺乏对此的描述.

其次,因为我正在使用darwin/amd64我搜索的源代码并在此处找到它:http: //golang.org/src/pkg/syscall/asm_darwin_amd64.s?h = RawSyscall

似乎它是由汇编(我无法理解)写的,你能解释61-80行中发生的事情,以及ok1:第76行下部分的含义是什么?

我还在http://golang.org/src/pkg/syscall/zsyscall_darwin_amd64.go中找到了一些代码zsyscall,它的文件名是什么意思?

syscall&之间有什么区别rawsyscall

如果我想编写自己的系统调用函数,如何以及何时使用它们(是的,os包提供了很多选择,但仍然存在一些不包含的情况)?

这么多菜鸟问题,感谢您耐心阅读和回答:)

unix assembly operating-system system-calls go

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

C extern变量访问

我有一个头文件,其中声明了一个extern变量.

所以在这个啊文件中看起来会像这样

  extern uint16_t externVariable;
Run Code Online (Sandbox Code Playgroud)

所以我有2个.c文件b和c,其中我想访问ah文件中的extern变量.在b和c .c文件中我已经包含了ah文件

当我没有在b中声明变量但在c中声明(没有单词extern)时就是这样的

 uint16_t externVariable;
Run Code Online (Sandbox Code Playgroud)

它工作正常.但是当它在b和ci中都有一些编译错误.有什么方法可以解决这个问题吗?

这样做的原因是因为我在.c文件中有代码,我想将代码分成2个不同的.c文件,以获得整洁和清晰.

c extern

2
推荐指数
1
解决办法
2072
查看次数

main()中的EXC_BAD_ACCESS

我有一个EXC_BAD_ACCESSmain(),这里是我的代码:

int main(int argc, char *argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, @"TestBedAppDelegate");
    [pool release];
    return retVal;
}

@interface TestBedAppDelegate : NSObject <UIApplicationDelegate>
@end

@implementation TestBedAppDelegate
- (void)applicationDidFinishLaunching:(UIApplication *)application {    
    UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:[[TestBedViewController alloc] init]];
    [window addSubview:nav.view];
    [window makeKeyAndVisible];
}
@end

- (void) action: (id) sender
{
    [self highRetainCount];
}

@implementation TestBedViewController
- (void) highRetainCount
{
    UIView …
Run Code Online (Sandbox Code Playgroud)

cocoa objective-c ios

2
推荐指数
1
解决办法
259
查看次数

C++:类和回调问题

这是我的代码和要求:

我有2个A和B类,它们没有任何继承.我使用A类的一个方法来调用B类的一个方法.然后B类的方法应该回调A类的一个方法来执行一个回调.

部分代码:

classA.h:

#include "classB.h"

class classA
{
  public:
  classA();
  classB *pClassB;
  void callClassB();
  void callBack();
};
Run Code Online (Sandbox Code Playgroud)

classA.cpp:

#include "classA.h"
classA::classA()
{
  pClassB = new classB();
}

void classA::callBack()
{
  return;
}

void classA::callClassB()
{
  pClassB->callFunction();
}
Run Code Online (Sandbox Code Playgroud)

classB.h:

class classB
{
  public:
  classB();
  void callFunction();
}
Run Code Online (Sandbox Code Playgroud)

classB.cpp:

#include "classB.h"
classB::classB()
{
}

void classB::callFunction()
{
   // I should call classA's callback here!
}
Run Code Online (Sandbox Code Playgroud)

问题是,我不能在classB.h中包含classA.h,因为它会在其他地方引起一些编译问题(我无法解决).我不能将classB作为classA的子类(如果可以的话,我只需要做classA::callBack()).那么这种情况有解决方案吗?

更新:这是我修改过的:

class classB
{
  public:
  classB(classA& pCallBack);
  void callFunction();
  void (classA::*m_callback)(void);
};

classA::classA() …
Run Code Online (Sandbox Code Playgroud)

c++

2
推荐指数
1
解决办法
886
查看次数

警告:函数返回与C不兼容的用户定义类型

标题:

using namespace std;
extern "C" {
  string testFunc();
}
Run Code Online (Sandbox Code Playgroud)

的.cpp:

string testFunc()
{
  return string("test");
}
Run Code Online (Sandbox Code Playgroud)

建设时我收到了这个警告:

'testFunc' has C-linkage specified, but returns user-defined type 'string' (aka 'basic_string<char>') which is incompatible with C
Run Code Online (Sandbox Code Playgroud)

我测试了我的功能,并且正确地返回了"test".

这个警告会引起任何问题吗?

我正在使用Apple LLVM 4.2,C99,XCode 4.6中的所有默认设置.

c++ xcode llvm

2
推荐指数
1
解决办法
4136
查看次数

转TCP超时无效?

我正在使用net.Listen()来监听客户端的TCP连接.

当客户端建立连接时,Handler(conn net.Conn)将处理它.

func Handler(conn net.Conn) {

  read_len, err := conn.Read(request)

  if err != nil {
    if neterr, ok := err.(net.Error); ok && neterr.Timeout() {
      fmt.Println(neterr)
      PILOG("Client timeout!", PILOGWARNING)
      conn.Close()
      return
  }
}
Run Code Online (Sandbox Code Playgroud)

我使用测试客户端连接然后突然终止客户端而不发送DISCONNECT消息.我的服务器应该在达到超时时关闭连接,但经过漫长的等待时间后它永远不会发生.

我也尝试过,conn.SetReadDeadline(time.Now())但似乎仍然无法正常工作.所以我想知道默认的TCP超时是什么,以及如何设置它?

netstat -n杀死客户后我也用过并获得了以下结果:

tcp4 0 0 127.0.0.1.12345 127.0.0.1.57296 CLOSE_WAIT

什么CLOSE_WAIT意思?

timeout tcp go

2
推荐指数
1
解决办法
2840
查看次数

如何防止来自 Go 编写的 HTTP 服务器的 DDoS 攻击?

我正在Go 中开发一个 HTTP 服务器,但它似乎无法阻止 DDoS 攻击。我需要为我的服务器实施防火墙吗?

还有一个解决方案:我可以使用Nginx作为代理服务器来防止DDoS攻击,但这会使服务器部署复杂化。

security http ddos go

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

无法从map分配给struct成员

码:

type t_struct struct {
    player string
    id     int
}

func main() {
    dataA := make(map[string]t_struct)
    dataB := make(map[string]*t_struct)

    var playerA t_struct
    playerA.player = "tom"
    playerA.id = 1
    dataA["classA"] = playerA
    dataA["classA"].id = 2 // ERROR, why?

    playerB := new(t_struct)
    dataB["classB"] = playerB
    dataB["classB"].player = "rick"
    dataB["classB"].id = 3
}
Run Code Online (Sandbox Code Playgroud)

并得到错误:

无法分配给dataA ["classA"].id

我想知道为什么dataA["classA"].id = 2不工作但是dataB["classB"].id = 3呢?如果要修改它的成员值,它是将结构指针保存到地图的唯一方法吗?

struct map go

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

Go package syscall conn.Read()是非阻塞的并导致高CPU使用率

奇怪的是,在我的情况下Read()是非阻塞并导致高CPU使用率.

我的代码:

功能main:

l, err := net.Listen("tcp", ":13798")


if err != nil {
    log.Fatal(err)
  }

  for {
    // Wait for a connection.
    conn, err := l.Accept()
    if err != nil {
      log.Fatal(err)
    }
    // Handle the connection in a new goroutine.
    // The loop then returns to accepting, so that
    // multiple connections may be served concurrently.
    go reqHandler.TCPHandler(conn)

    runtime.Gosched()
  }
Run Code Online (Sandbox Code Playgroud)

功能TCPHandler:

func TCPHandler(conn net.Conn) {
request := make([]byte, 4096)
  for {
    read_len, err …
Run Code Online (Sandbox Code Playgroud)

networking network-programming tcp system-calls go

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