小编Jen*_*ens的帖子

为什么shebang线总是第一线呢?

我有简单的perl脚本如下:

#!/usr/bin/perl

use strict;
use warnings;

print "hello world!\n";
Run Code Online (Sandbox Code Playgroud)

我可以执行如下脚本:

>temp.pl
hello world!
>
Run Code Online (Sandbox Code Playgroud)

如果我添加这样的评论:

#this script is just for test
#the shebang
#!/usr/bin/perl

use strict;
use warnings;

print "hello world!\n";
Run Code Online (Sandbox Code Playgroud)

当我尝试执行时,它给我输出如下:

> temp.pl
use: Command not found.
use: Command not found.
print: Command not found.
> 
Run Code Online (Sandbox Code Playgroud)

这里的重点是shebang line应该总是在顶部无论如何.但有人能解释我为什么吗?

unix perl solaris shebang

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

VLA和操作数大小的副作用

我知道sizeof永远不会评估它的操作数,除非在所述操作数是VLA的特定情况下.或者,我以为我知道.

void g(int n) {
    printf("g(%d)\n", n);
}

int main(void) {
    int i = 12;

    char arr[i]; // VLA

    (void)sizeof *(g(1), &arr); // Prints "g(1)"
    (void)sizeof (g(2), arr);   // Prints nothing

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

到底是怎么回事?

以防万一,这是在Coliru上用GCC 5.1编译的.

c side-effects sizeof variable-length-array

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

如何使用正确的参数调用C中的execl()?

如果我输入一个shell,我有vlc(重现视频的程序):

/ home/vlc"/ home/my movies /我想看的电影.mkv"

它打开了一个再现电影.

但是,当我运行以下程序时:

#include <unistd.h>

int main(void) {

  execl("/home/vlc", "/home/my movies/the movie i want to see.mkv",NULL);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

vlc打开但不会重现任何内容.我怎么解决这个问题?

我试过的事情:

我猜的

execl("/home/vlc", "/home/my movies/the movie i want to see.mkv",NULL);
Run Code Online (Sandbox Code Playgroud)

相当于在shell中输入:

/home/vlc /home/my movies/the movie i want to see.mkv
Run Code Online (Sandbox Code Playgroud)

这不起作用,所以我试过

 execl("/home/vlc", "\"/home/my movies/the movie i want to see.mkv\"",NULL);
Run Code Online (Sandbox Code Playgroud)

和vlc打开但不会重现.

我没有在最后写NULL,而是尝试了0,(char*)0,1 ....没有用.救命!!!!

c quotes external exec unistd.h

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

Quicksort:迭代或递归

我学习了快速排序以及如何在递归和迭代方法中实现它.
在迭代方法中:

  1. 将范围(0 ... n)推入堆栈
  2. 使用数据透视表对给定数组进行分区
  3. 弹出顶部元素.
  4. 如果范围包含多个元素,则将分区(索引范围)推入堆栈
  5. 执行上述3个步骤,直到堆栈为空

递归版本是wiki中定义的正常版本.

我了解到递归算法总是慢于迭代算法.
那么,就时间复杂度而言,哪种方法更受欢迎(内存不是问题)?
哪一个在编程竞赛中使用得足够快?
c ++ STL sort()是否使用递归方法?

iteration algorithm recursion quicksort

18
推荐指数
2
解决办法
3万
查看次数

.vimrc的重新加载时间逐渐减慢

我对vim的启动时间大约是半秒(用"--startuptime"测试),但是在我重新加载vimrc几次之后source,它随后会变慢.我没有系统地调试.vimrc,所以我不知道如何继续.设置verbose有助于看到发生了什么,我几乎可以肯定.vimrc被多次加载.(特别是filetype.vimftplugin.vim)每当我按下Ctrl-C停止挂机,我得到了一个错误filetype.vim,我认为这是因为VIM大部分时间都花在试图加载filetype.vim.我看到的最可能的罪魁祸首是.vimrc的自动重载:

if has("autocmd")
    autocmd bufwritepost .vimrc source $MYVIMRC "auto source vimrc
endif
Run Code Online (Sandbox Code Playgroud)

我怎么能阻止这种情况发生?

vim reload

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

在shell脚本中使用别名?

我在样本shell脚本中定义的别名不起作用.我是Linux Shell Scripting的新手.下面是示例shell文件

#!/bin/sh

echo "Setting Sample aliases ..."
alias xyz="cd /home/usr/src/xyz"
echo "Setting done ..."
Run Code Online (Sandbox Code Playgroud)

在执行此脚本时,我可以看到echo消息.但是如果我执行alias命令,我会看到以下错误

xyz: command not found
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

shell

18
推荐指数
3
解决办法
4万
查看次数

使vim indent C预处理程序指令与其他语句相同

基本信息

(注意:请一直阅读,因为我花了一些时间来组织它,确保我解决了我遇到的每个问题以及为什么一个提议的解决方案对我不起作用.)

我在vim中使用cindent来自动进行缩进.它大部分时间都很好用.但是,cindent做了三个坏事(在我看来)涉及C预处理器指令(以哈希('#')开头的语句).

如果它是相关的,我使用标签进行缩进,我的.vimrc包含filetype indent on.

坏事1

只要我输入一个预处理器指令,vim就会将它放在第1列(它完全取消缩进).例如,是我输入代码时vim对我的代码所做的事情:

int main(void)
{
    while(1) {
        /* normal things */
#ifdef DEBUG
        printDebugInfo();
#endif
        /* normal things */
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我希望它看起来像这样:

int main(void)
{
    while(1) {
        /* normal things */
        #ifdef DEBUG
        printDebugInfo();
        #endif
        /* normal things */
    }
}
Run Code Online (Sandbox Code Playgroud)

换句话说,我更喜欢vim像任何其他C/C++语句一样处理预处理程序指令.

坏事2

当我使用预处理器指令使用==(或[movement]=跨越)一行时,vim将其放回第1列.(这与Bad Thing 1一致,但仍然存在问题.)

坏事3

如果(由于Bad Thing 1或2或使用<<)预处理程序指令最终在第1列中,它会在那里"卡住"并且不受影响>>.增加缩进的唯一方法是I<Tab>或 …

c vim indentation preprocessor-directive

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

如何每N秒重复运行bash脚本?

我有一些bash脚本,有一些统计信息,如磁盘信息,内存使用等等.但它只在脚本运行和关闭后显示一次信息.我可以重复运行此脚本(例如"htop")或类似的东西吗?我想在5-10秒后更新此信息.谢谢!

linux bash

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

哪个部分的ELF文件必须加载到内存中?

可执行文件的ELF文件有一个程序(段)标题和一个节头,可以看到readelf -a,这是一个例子:

在此输入图像描述

在此输入图像描述

上面的两张图分别是节标题和节目(段)标题.可以看出,段头由若干段头组成,用于将程序加载到存储器中.

是否只需将.text,.rodata,.data,.bss部分加载到内存中?

段中的所有其他部分(例如,第3段中的.ctors,.dtors .jcr)是否用于对齐?

c linux memory elf

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

Shell脚本shebang为未知的道路

是否可以在不知道要执行的程序路径的情况下指定shebang行?

也许不指定路径

#!node
Run Code Online (Sandbox Code Playgroud)

或指定几个选项

#!/usr/local/bin/node
#!/usr/bin/node
Run Code Online (Sandbox Code Playgroud)

跨平台解决方案的额外点(各种风格的linux,BSD,OSX等......)

shell env shebang

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