我已经看到了一些关于send()它的问题,讨论了底层协议.我完全清楚,对于TCP,任何消息都可能在发送时被分解为部分,并且无法保证接收器将在一次原子操作中获取消息.在这个问题中,我只谈论send()系统调用的行为,因为它与本地系统的网络层交互.
根据POSIX标准和send()我读过的文档,要发送的消息的长度由 length 参数指定.请注意:send()发送一条长度为length的消息.进一步:
如果发送套接字上没有空间来保存要传输的消息,并且套接字文件描述符没有
O_NONBLOCK设置,send()则应阻塞直到空间可用.如果发送套接字上没有空间来保存要传输的消息,并且套接字文件描述符确实已O_NONBLOCK设置,则将send()失败.
我没有看到send()在这个定义中有任何可能返回除了-1(这意味着没有数据在内核中排队等待传输)或长度之外的任何值,这意味着整个消息在内核中排队等待传输.也就是说,在我看来,对于本地排队消息以便在内核中传递,send()必须是原子的.
send(),则必须返回-1.显然,在这种情况下我们不能排队部分消息,因为我们不知道发送了多少消息.因此在这种情况下无法发送任何内容.send()必须阻塞,直到空间可用.然后消息将排队并send()返回长度.send()必须失败(返回-1)并将errno设置为EAGAIN或EWOULDBLOCK.同样,因为我们返回-1它很清楚,在这种情况下,消息的任何部分都不能排队.我错过了什么吗?send()是否可以返回一个值>=0 && <length?在什么情况下?那么非POSIX/UNIX系统呢?Windows send()实现是否符合此要求?
我需要在我的CMake文件(CMake 2.8.10.2)中为我的C和C++编译行添加各种标志.我看到有些人使用add_definitions但是我可以看到它用于预处理器标志(-D).我有一些我不想传递给预处理器的标志.
所以我一直在努力修改CMAKE_C_FLAGS和CMAKE_CXX_FLAGS.我看到有些人正在使用类似的东西:
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -new -flags -here")
Run Code Online (Sandbox Code Playgroud)
但后来我在cmake文档中读到这样效率较低,正确的方法是使用list(APPEND ...),如下所示:
list(APPEND CMAKE_C_FLAGS -new -flags -here)
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,我的编译行包含由分号分隔的标志,并且是语法错误.我读到这是现在列表存储在内部,但我认为这将由cmake在我使用变量时处理.这看起来很基本; 难道我做错了什么?我的意思是,如果这些列表不能被使用,除非你碰巧想要一个以分号分隔的值列表(除了我想要的Windows%PATH%设置或其他东西)之外,这些列表的好处是什么?我是否应该使用引用的版本,即使文档表明它效率较低/不合适?
我正在尝试使用NetBean来编写C++,我已经按照这里找到的每个命令进行了操作:https: //netbeans.org/community/releases/68/cpp-setup-instructions.html#compilers_windows
但是,我在netbeans中使用make命令选项时遇到问题.我已经设置了基本目录o M:\ c ++\bin,我安装了MinGW,并且我将make命令设置为M:\ MinSYS\bin\make.exe,但是当尝试构建一个简单的程序时,netbeans会生成以下错误:
"/M/c++/MinSYS/bin/make.exe" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make.exe[1]: Entering directory `/m/Documents/NetBeansProjects/CppApplication_1'
"/M/c++/MinSYS/bin/make.exe" -f nbproject/Makefile-Debug.mk dist/Debug/MinGW-Windows/cppapplication_1.exe
make.exe[2]: Entering directory `/m/Documents/NetBeansProjects/CppApplication_1'
mkdir -p build/Debug/MinGW-Windows
make.exe[2]: mkdir: Command not found
make.exe[2]: *** [build/Debug/MinGW-Windows/main.o] Error 127
make.exe[2]: Leaving directory `/m/Documents/NetBeansProjects/CppApplication_1'
make.exe[1]: *** [.build-conf] Error 2
make.exe[1]: Leaving directory `/m/Documents/NetBeansProjects/CppApplication_1'
make.exe": *** [.build-impl] Error 2
Run Code Online (Sandbox Code Playgroud)
我已经尝试将make命令更改为包含make的任何内容,但是无论如何都没有,任何帮助都会受到大力赞赏.
我正在构建自己的 Python 安装,然后使用 pip 安装一些包。我想将预构建的二进制轮用于Cryptography等软件包。
在 GNU/Linux 上就可以了:它抓住了 Manylinux1 的轮子,一切都工作得很好。
在 MacOS 上,它拒绝下载大多数版本的任何二进制轮。我已经为 pip 添加了很多-v选项,但它只说了:
$ mypython -s -u -m pip install -v --only-binary 'cryptography' 'cryptography==2.6.1'
...
Skipping link https://files.pythonhosted.org/packages/.../cryptography-2.6.1-cp27-cp27m-macosx_10_6_intel.whl#sha256=... (from https://pypi.org/simple/cryptography/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*); it is not compatible with this Python
...
Could not find a version that satisfies the requirement cryptography==2.6.1 (from versions: 1.0.1, 1.0.2, 1.1, 1.1.1, 1.1.2, 1.2, 1.2.1, 1.2.2, 1.3.1, 1.3.2, 1.3.3, 1.3.4, 1.4, 1.5, 1.5.1, …Run Code Online (Sandbox Code Playgroud) 我一直在尝试在 Clear Linux 上构建 glibc,这里讨论了之前的问题: How do I build into a specified directory using the "prefix" option of configure?
现在我已经成功运行configure,makefile中似乎有问题:
james@clr ~/Downloads/glibc $ make
Makeconfig:42: *** missing separator. Stop.
Run Code Online (Sandbox Code Playgroud)
Makeconfig第42行:
objdir must be defined by the build-directory Makefile.
Run Code Online (Sandbox Code Playgroud)
和 nakefile 直到错误点:
ifneq (,)
This makefile requires GNU Make.
endif
all: # Make this the default goal
ifneq "$(origin +included-Makeconfig)" "file"
+included-Makeconfig := yes
ifdef subdir
.. := ../
endif
# $(common-objdir) is the place to put objects and
# such …Run Code Online (Sandbox Code Playgroud) 我遇到了一个问题,如果我在远程系统上以守护进程模式启动 Emacs,然后在我的本地系统中运行ssh remotehost emacsclient -c,它会失败,并且由于身份验证错误而导致 X11 连接被拒绝。 然而,诸如此类的事情ssh remotehost xterm工作正常,所以它与 ssh 连接、X 转发等无关。
有问题的两个系统都运行 Ubuntu 18.04 LTS。
可以猜到,问题是 xauth,特别是在阅读了 2010/2011 年提交的问题后,这似乎是由于 GDM 将环境XAUTHORITY变量设置为$XDG_RUNTIME_DIR/gdm/Xauthority(类似于/run/user/1000/gdm/Xauthority)的方式,而传入的 SSH 连接则不然XAUTHORITY在为 SSH 会话设置 xauth cookies 之前设置。
这意味着 ssh xauth cookie 将添加到默认$HOME/.Xauthority文件中。我的 Emacs 守护进程无法看到这些 cookie,因为它正在使用 GDM$XDG_RUNTIME_DIR/gdm/Xauthority文件。
正如我所说,这种差异似乎已经是一个已知问题 8 年多了……没有人解决它吗?疯狂的。我已经编写了一个安装 cookie 的脚本,但必须这样做是相当恶心的。
有没有办法让我的 ssh 会话使用 GDM Xauthority 文件?我已经尝试XAUTHORITY在 shell 设置中进行设置,但显然设置得太晚了,在 SSH 守护程序配置新的 Xauth cookie 之后,因为它仍然放入$HOME/.Xauthority.
为了确保我的Linux构建是相同的,无论构建主机使用的分发如何,我已将我的编译器和sysroot文件打包成可重定位的tar文件,并将其检入源代码控制.
因此,任何构建的第一步(或者至少是在任何编译步骤之前必须调用的步骤)必须是提取此tar文件.
如果我使用的是makefile,这很简单.但是,该项目正在使用cmake,我无法用cmake找出任何方法.甚至可能是我需要在cmake开始检测编译器之前调用这个提取步骤:我可以对编译器名称进行硬编码,但如果cmake失败,如果它找不到编译器,那么我需要在该测试之前进行解包.
这可能与cmake有关吗?
我正在考虑在 Emacs 26 重写后从 Flycheck 切换回 Flymake。Flymake 让我困扰的一件事是它在模式线上占用了多少空间。它有一个字符串Flymake加上结果。这似乎是一件愚蠢的事情,但这只是 80 字符帧上模式行的 10%,只是为了一个名称!我想在模式行上看到很多重要信息,因此我尝试删除对我没有帮助的内容 - 我知道缓冲区中启用了哪些次要模式等,因为我配置了它们!就我个人而言,我宁愿根本不看到名称,而只看到结果,或者最多看到F或FM。
我可以用来diminish完全摆脱模式行信息,但我当然不希望这样:我希望能够看到缓冲区的状态。
我查看了flymake.eldefun flymake--mode-line-format,发现这个字符串似乎不是可配置的,或者根本不容易更改。
有人对此有什么想法吗?
我正在尝试使用GCC和GNU Make编译并链接程序集和c程序,但是当我运行“ make”命令时,即使安装并运行正常,它也会引发错误“找不到GCC” ,在修复了make文件后,现在在第14行中抛出了找不到make命令!
我已经尝试在另一台机器上编译它,但是没有用。当然,我已经尝试运行常规的GCC命令,并且运行良好!使用环境变量似乎一切正常。如果我尝试在没有make的情况下运行命令,则会引发linker.ld语法错误,但是我假设它在我身上。
制作文件:
CC=gcc
TARGET=bookOs
C_FILES=./kernel.c
OBJS=$(C_FILES:.c=.o)
all compile: $(TARGET)
all: finale
.PHONY: all compile clean finale
%.o:
gcc -c $(@:.o=.c) -ffreestanding -fno-exceptions -m32
$(TARGET): $(OBJS)
?$(shell nasm -f elf start.asm -o start.o)
?gcc -m32 -nostdlib -nodefaultlibs -lgcc start.o $? -T linker.ld -o $(TARGET)
finale:
?$(shell cd ~/Desktop/bookOs/) ?
$(shell cp $(TARGET) ./iso/boot/$(TARGET))
$(shell grub2-mkrescue iso --output=$(TARGET).iso)
clean:
?rm -f *.o $(TARGET) $(TARGET).iso
?find . -name \*.o | xargs --no-run-if-empty rm
Run Code Online (Sandbox Code Playgroud)
汇编文件:
bits 32
global _start
extern …Run Code Online (Sandbox Code Playgroud)