标签: bsd

将select()用于非阻塞套接字

我正在尝试使用select函数在服务器和1个客户端(不再)之间进行非阻塞i/o,其中通信流畅(可以随时发送而另一个将在不等待发送的情况下接收).我找到了一些包含一些代码的教程,并尝试将其改编为我的.这就是我所拥有的 -

服务器

#define PORT "4950"
#define STDIN 0

struct sockaddr name;

void set_nonblock(int socket) {
    int flags;
    flags = fcntl(socket,F_GETFL,0);
    assert(flags != -1);
    fcntl(socket, F_SETFL, flags | O_NONBLOCK);
}


// get sockaddr, IPv4 or IPv6:
void *get_in_addr(struct sockaddr *sa) {
    if (sa->sa_family == AF_INET)
        return &(((struct sockaddr_in*)sa)->sin_addr);

    return &(((struct sockaddr_in6*)sa)->sin6_addr);
}

int main(int agrc, char** argv) {
    int status, sock, adrlen, new_sd;

    struct addrinfo hints;
    struct addrinfo *servinfo;  //will point to the results

    //store the connecting address and size …
Run Code Online (Sandbox Code Playgroud)

c sockets select bsd

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

Binutils stat非法选项-c

我在我的脚本中使用两次stat来查找文件文件权限,一次查找文件的大小.

 `stat -c %A "$directory/$file"`
 `stat -c %s "$directory/$file"`
Run Code Online (Sandbox Code Playgroud)

我使用的是OSX 10.7,目录和文件是我所在的当前目录和文件的变量.

macos bsd gnu stat binutils

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

dTrace脚本和工具

我最近开始使用dTrace,并注意到它有多棒.它是完美的分析工具,不会给程序员带来负担,在他们的应用程序中设置数百个探针.

我在这里和那里找到了一些不错的衬里和示例脚本,但我想知道其他人可能想要分享的脚本,工具和链接.

BTW有人试过Chimes吗?

performance bsd profiling sun dtrace

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

使用适用于iPhone的BSD许可证库(使用GPL库)

在查看各种许可证的细节时我感到很困惑,并且想知道是否有人可以帮助我.基本上,我正在寻找一个简单的SSH客户端在应用商店上发布.应用程序商店中的所有其他SSH客户端都会收费,虽然我确信它们会比我做的更好,但我想添加一个免费选项.目前我只是将其开发用于个人用途或在我工作的公司内部,我意识到这意味着我不需要担心GPL不兼容性,但我认为我最好将其设置为工作如何我首先想要的是,而不是在后期围绕不同的核心进行重建.

我的想法是使用预先构建的SSH库,但这个想法似乎充满了法律问题.

  • 然而,libssh是在lgpl下发布的,我不想进入iPhone开发和GPL的合法混乱......我听说它们在很大程度上是不兼容的,如果可能的话,我宁愿避免任何合法的雷区.
  • libssh2是在BSD许可下发布的,AFAIK可以与iPhone devisisence一起使用.我觉得很完美.因为我正在查看 为iphone编译libssh2的一些说明,但是,我注意到它使用了GnuPG中的3个库,这些库是在(L)GPL下发布的...这是否意味着使用libssh2导致我进入同一个合法的雷区libssh?有没有办法将这些库用于非GPL等价物?
  • 是否有可在iPhone兼容许可下使用的备用SSH库?

iphone bsd licensing gpl

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

如何测试rm的GNU或BSD版本?

GNU版本rm有一个很酷的-I标志.从联机帮助页:

-I     prompt once before removing more than three files, or when removing recursively.   Less
          intrusive than -i, while still giving protection against most mistakes
Run Code Online (Sandbox Code Playgroud)

Mac不会:

$ rm -I scratch
rm: illegal option -- I
usage: rm [-f | -i] [-dPRrvW] file ...
   unlink file
Run Code Online (Sandbox Code Playgroud)

有时人们coreutils在Mac上安装了(GNU版本),有时却没有.有没有办法在继续之前检测此命令行标志?我想在我的bash_profile中有这样的东西:

if [ has_gnu_rm_version ]; then
    alias rm="rm -I"
fi
Run Code Online (Sandbox Code Playgroud)

bash shell bsd gnu

5
推荐指数
3
解决办法
1808
查看次数

在IOS上使用CFSocket进行UDP广播

一直在做一些谷歌搜索和一些关于这个主题的阅读,但无论我花了多少时间搜索,似乎无法做到正确.

我想要做的是通过宣传我对他们提供的服务的兴趣来接收在我的网络上连接的设备的广播消息.使用wireshark,我可以看到来自我想通过网络发送的网络设备的广播/通知消息,但不能通过我的广播搜索来查看他们服务的兴趣.但是通过网络实用程序,我可以看到套接字已创建,但不知道它处于哪种状态,无论是监听还是已连接.

是的,我知道我可以使用这些库来实现这一目标,但我想从头开始构建自己的东西,并更好地了解它是如何工作的.

MySocket.h

#import <Foundation/Foundation.h>
#import <CoreFoundation/CoreFoundation.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#if TARGET_OS_IPHONE
#import <CFNetwork/CFNetwork.h>
#endif

 @interface MySocket : NSObject
 {
    NSString* _message;
    CFSocketRef cfSocket;
    CFRunLoopSourceRef cfSource;

 }

 - (void)listen;
 @end
Run Code Online (Sandbox Code Playgroud)

MySocket.m

#import "MySocket.h"

#define MAX_UDP_DATAGRAM_SIZE 65507

@implementation MySocket


static void socketCallback(CFSocketRef cfSocket, CFSocketCallBackType
                           type, CFDataRef address, const void *data, void *userInfo)
{
    NSLog(@"socketCAllBAck was called");
}    

- (void)listen
{
    //Enable broadcast to network hosts        
    int yes = 1;
    int setSockResult = 0;
    _message = [[NSMutableString alloc …
Run Code Online (Sandbox Code Playgroud)

bsd ios cfsocket

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

write()上的段错误,带有~8MB缓冲区(OSX,Linux)

我很好奇什么样的缓冲区大小write()和read()可以在Linux/OSX/FreeBSD上处理,所以我开始玩下面的哑项目:

#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>

int main( void ) {
    size_t s = 8*1024*1024 - 16*1024;
    while( 1 ) {
        s += 1024;
        int f = open( "test.txt", O_CREAT | O_WRONLY | O_TRUNC, S_IRUSR | S_IWUSR | S_IXUSR );
        char mem[s];
        size_t written = write( f, &mem[0], s );
        close( f );
        printf( "(%ld) %lu\n", sizeof(size_t), written );
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这让我可以测试在segfaulting之前我能得到的看似"8MB障碍"的接近程度.在大约8MB标记处,我的程序死了,这是一个示例输出:

(8) 8373248
(8) 8374272
(8) 8375296
(8) 8376320
(8) 8377344
(8) …
Run Code Online (Sandbox Code Playgroud)

linux bsd segmentation-fault

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

open(name,O_CREAT | O_DIRECTORY,mode)的预期行为是什么?

尽管仔细阅读了相关的标准文档,但在open使用包含标志的系统调用调用系统调用时,我无法理解POSIX兼容系统中的预期行为O_CREAT|O_DIRECTORY.

该标准规定了

如果设置了O_CREAT和O_DIRECTORY 请求的访问模式既不是O_WRONLY也不是O_RDWR,则结果未指定.

但是它没有指定既没有系统的行为(O_CREAT|O_DIRECTORY|O_WRONLY),也没有(O_CREAT|O_DIRECTORY|O_RDWR).确实(据我所知),行为EISDIR仅适用于现有目录.

在与O_CREATE相关的部分中,标准指定当命名文件不存在时,

如果未设置 O_DIRECTORY ,则应将文件创建为常规文件; [...]

但同样没有说明如果O_DIRECTORY设置也会发生什么.

我看两者的手册页NetBSD的(这臭名昭著非常关心的POSIX兼容)和Linux的(这是一种广泛使用的系统,尽管实际上不是POSIX一个),但我无法找到任何澄清.

说两个标志的使用是否未指定是否正确?如果是这样,最常见的行为是什么?

是否open(name, O_CREAT|O_DIRECTORY, mode) 相当于mkdir任何POSIX兼容的操作系统?

c linux filesystems bsd posix

5
推荐指数
2
解决办法
1634
查看次数

将线条与匹配的第一个字段组合

几年来,我经常需要将(已排序)文本的行与匹配的第一个字段组合在一起,而我从未找到过优雅(即单行unix命令行)的方法.我想要的是与unix join命令的相似之处,但是join需要2个文件,每个键最多出现一次.我想从一个文件开始,其中一个键可能出现多个tile.

我有一个执行此操作的ruby和perl脚本,但是没有办法将我的算法缩短为单行.经过多年的UNIX的使用,我还在学习新的技巧有comm,paste,uniq,等,我怀疑有一个聪明的办法来做到这一点.

有一些相关的问题,比如将所有具有相同第一列的行连接到同一行 ; 命令行匹配第一个字段匹配的行(sed,awk等) ; 并将线条与匹配的键组合在一起 - 但这些解决方案从未真正提供干净可靠的解决方案.

这是示例输入:

apple:A fruit
apple:Type of: pie
banana:tropical fruit
cherry:small burgundy fruit
cherry:1 for me to eat
cherry:bright red
Run Code Online (Sandbox Code Playgroud)

这是示例输出:

apple:A fruit;Type of: pie
banana:tropical fruit
cherry:small burgundy fruit;1 for me to eat;bright red
Run Code Online (Sandbox Code Playgroud)

这是我理想的语法:

merge --inputDelimiter=":" --outputDelimiter=";" --matchfield=1 infile.txt
Run Code Online (Sandbox Code Playgroud)

"matchfield"实际上是可选的.它可能永远是第一个领域.分隔符的后续出现应该被视为纯文本.

我不介意perl,ruby,awk单行,如果你能想到一个简短而优雅的算法.这应该能够处理数百万行输入.有任何想法吗?

unix awk command-line bsd join

5
推荐指数
2
解决办法
397
查看次数

OSX上的PF头net / pfvar.h丢失

PF(数据包过滤器)是内核级别的防火墙,包含在类似BSD的内核中(Darwin内核基本上是BSD),并且BSD手册页提供了有关这些标头的详细文档,从而可以通过编程方式控制PF。PF包含在OSX内核中,即使默认情况下它是禁用的。

我知道这是可以控制PF在OSX好歹,因为像应用Murus存在,这种低级别提供用户友好的GUI“防火墙之王”,而这个API是不是没有手动/etc/pf.conf解析,我首先怀疑。

有什么方法可以从OSX应用程序添加这些标头并控制PF?

MacOS Sierra 10.12.6

Xcode 9.2(9C40b)

更新我发现的一些信息,虽然有些过时

macos bsd firewall darwin

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