小编ano*_*abu的帖子

struct ifreq:“ linux / if.h”和手册页中的不同定义

在在线手册页netdevice(7)-Linux手册页中,ifreq结构的定义为:

struct ifreq {
               char ifr_name[IFNAMSIZ]; /* Interface name */
               union {
                   struct sockaddr ifr_addr;
                   struct sockaddr ifr_dstaddr;
                   struct sockaddr ifr_broadaddr;
                   struct sockaddr ifr_netmask;
                   struct sockaddr ifr_hwaddr;
                   short           ifr_flags;
                   int             ifr_ifindex;
                   int             ifr_metric;
                   int             ifr_mtu;
                   struct ifmap    ifr_map;
                   char            ifr_slave[IFNAMSIZ];
                   char            ifr_newname[IFNAMSIZ];
                   char           *ifr_data;
               };
           };
Run Code Online (Sandbox Code Playgroud)

但是我的linux标头显示了不同的定义。以下是/usr/include/linux/if.h中的定义。我正在使用的内核版本是Linux 3.18。

struct ifreq {
#define IFHWADDRLEN 6
    union
    {
        char    ifrn_name[IFNAMSIZ];        /* if name, e.g. "en0" */
    } ifr_ifrn;

    union {
        struct  sockaddr ifru_addr;
        struct  sockaddr ifru_dstaddr;
        struct  sockaddr ifru_broadaddr;
        struct …
Run Code Online (Sandbox Code Playgroud)

c c++ linux network-programming

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

Bash:为带空格的字符串添加额外的单引号

当我尝试将参数作为变量传递给bash中的任何命令时,如果变量值有空格,我可以看到由bash添加的额外引号.

我正在创建一个文件"some file.txt"并将其添加到变量$ file.我使用$ file并将其存储在另一个变量$ arg中,并在$ file上加引号.我希望通过bash进行可变扩展后的命令是

find . -name "some text.txt"
Run Code Online (Sandbox Code Playgroud)

但我收到错误,实际执行的文件是,

find . -name '"some' 'file.txt"
Run Code Online (Sandbox Code Playgroud)

为什么会这样呢?在这种情况下,bash变量expanson如何工作?

$ touch "some file.txt"
$ file="some file.txt"
$ arg=" -name \"$file\""

$ find . $arg
find: paths must precede expression: file.txt"
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

$ set -x
$ find . $arg
+ find . -name '"some' 'file.txt"'
find: paths must precede expression: file.txt"
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

bash variable-expansion

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

在expect命令中使用Bash数组变量扩展

这个问题的扩展: Bash:为带空格的字符串添加额外的单引号

将命令参数存储为bash数组后

touch "some file.txt"
file="some file.txt"
# Create an array with two elements; the second element contains whitespace
args=( -name "$file" )
# Expand the array to two separate words; the second word contains whitespace.
find . "${args[@]}"
Run Code Online (Sandbox Code Playgroud)

然后将整个命令存储在一个数组中

finder=( find . "${args[@]}" )
Run Code Online (Sandbox Code Playgroud)

在bash中我可以运行如下命令:

"${finder[@]}"
./some file.txt
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用expect时,我收到了错误

expect -c "spawn \"${finder[@]}\""
missing "
   while executing
"spawn ""
couldn't read file ".": illegal operation on a directory
Run Code Online (Sandbox Code Playgroud)

为什么bash变量扩展不会发生在这里?

bash expect variable-expansion

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

标签 统计

bash ×2

variable-expansion ×2

c ×1

c++ ×1

expect ×1

linux ×1

network-programming ×1