小编Mic*_*ael的帖子

定义C函数数组

我有一堆C函数被分配给一个函数指针数组,沿着这条线:

typedef int (*func)(int);

int SomeLongName1(int a) {         
  // ...
}                      

// ...

int SomeLongName1000(int a) {         
  // ...
}                      

func f[] = { SomeLongName1, ... , SomeLongName1000 };
Run Code Online (Sandbox Code Playgroud)

这是很多工作要创建并且容易出错.例如,函数名中可能存在拼写错误,使得有效函数仍然被命名,但错误的函数仍然存在.或者,如果最后添加了一个新函数,则可能会忘记进入并将其显式添加到函数指针列表中.

为了避免必须显式声明函数指针数组,我尝试了各种技巧,例如宏,这使得代码难以理解,并且需要知道宏如何工作,而我通常对它们不满意.

我想做的是这样的事情:

typedef int (*func)(int);

func f[] = {             
  int SomeLongName1(int a) {         
    // ...
  }                      
  // ...                   
  int SomeLongName1000(int a) {         
    // ...
  }                      
};                       
Run Code Online (Sandbox Code Playgroud)

这样,数组就会自动创建,如果有一些方法可以在末尾放置一个空指针,那么我可以确定有多少函数指针也很好.

但是,上面的内容并不是有效的C,而且我会以任何方式完成此任务.如果它是编译器特定的(例如GCC扩展),那就没问题.

所有函数在编译时都是静态知道的,所以我想避免必须对函数指针数组进行任何运行时初始化 - 而不是我找到了一种方法来做到这一点.

这个相关的问题如何定义一个函数数组,似乎问了同样的问题,但没有把它带到它的逻辑结论.具体来说,我不想重新键入我已输入的任何内容,以节省时间并避免错误.

c arrays function definition

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

限制Dropbox缓存大小

我遇到了Dropbox缓存的问题,我经常发现我与Dropbox同步的特定机器已经用完磁盘空间而Dropbox缓存是罪魁祸首.这是一个问题,因为机器Dropbox安装在无头(或几乎是这样),因此唯一的指示是出现问题突然发生在机器上应该可用的数据.

我已经读过可以清除缓存,但这很痛苦,因为这台机器正在运行OS X并且没有命令行界面,这意味着我必须将VNC插入机器才能重启Dropbox.这似乎也限制了我自动清除缓存的选项,虽然必须创建一个周期性任务来清理Dropbox文件夹似乎很容易出错并且容易出错.(例如,磁盘可能会在脚本运行之前填满.)

(更新:在低磁盘条件下删除文件似乎导致Dropbox再次开始同步而不重新启动,但我不确定是否有任何不良副作用,在我读过有关缓存的任何地方都说要停止删除期间Dropbox,然后重启.)

另外,似乎Dropbox空间耗尽这么快的原因是我有一个大的日志文件(大约半千兆字节),这只是附加的,但Dropbox正在创建一个新的缓存副本每次更改时都会显示整个旧版本.因此,从性能的角度来看,对于文件的每个微小的几个字节的添加,它不断创建这个大文件的副本是不可取的.

这台机器的磁盘空间相当紧张,所以我宁愿让Dropbox限制它的缓存量.有办法做到这一点吗?到目前为止我的搜索结果是空的.

更新:我尝试打开一个Dropbox支持请求,只是收到一封电子邮件回复说:"感谢您写信.虽然我们很乐意回答我们收到的每一个问题,但遗憾的是我们无法回复您的询问.大量的支持请求." ಠ_ಠ

caching dropbox

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

如何使用 diff 查看空格更改?

我发现这个问题有答案git diff。但是,我没有使用任何类型的版本控制来比较文件(我什至在我尝试比较的机器上没有可用的版本)。

基本上,类似于引用的问题,我试图查看空格的变化。该diff命令可能会显示:

bash-3.2$ diff 6241 6242
690c690   
<         
---       
>         
Run Code Online (Sandbox Code Playgroud)

但我不知道那是换行符,换行符和空格,还是什么。我需要知道两个文档之间的确切更改,包括空格。我已经尝试过cmp -l -b并且它有效,但是当有很多变化到它也不是真正有用的地步时,它很难阅读。

我真正想要的是让空白以某种方式呈现的某种方式,这样我就可以准确地说出空白是什么,例如颜色或 ^J、^M 等。我在手册中没有看到任何内容;diff --version显示 GNU 版本 2.8.1。

再举一个例子,我还尝试diff通过管道传输through的输出hexdump

bash-3.2$ diff 6241 6242 | hexdump -C                                         
00000000  36 39 30 63 36 39 30 0a  3c 20 0a 2d 2d 2d 0a 3e  |690c690.< .---.>|
00000010  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  | …
Run Code Online (Sandbox Code Playgroud)

diff whitespace colors

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

控制计划评估(guile)

这似乎是一个简单的问题; 也许它很简单,很难找到能找到答案的搜索.在Scheme(特别是Guile实现,如果这有任何区别)我如何评估已被引用的内容?

这就是我想要做的.

我基本上需要确保我定义的函数以特定顺序计算其参数,因为在评估其他参数期间,评估一个参数所引起的副作用是依赖的.但是,Scheme表示可以按任何顺序计算参数,因此我想通过引用参数手动强制它,然后按所需的顺序手动评估它们.

似乎"eval" 应该做我想要的,但它有两个问题:

  1. 它的使用是不鼓励的,所以我觉得应该有一个更好的方法来完成我想在这里做的事情.
  2. 在Scheme中,似乎eval采用第二个参数,即环境.这对我来说很困惑.我希望它在声明出现的相同环境中进行评估,那么为什么我需要第二个参数呢?这甚至可能吗?我玩了一点eval,看起来有些实现需要不同的参数(例如,mit-scheme甚至不知道什么(交互环境)!)

我尝试过其他技巧,比如建立一个lambda:

(list 'lambda '() '(car (b c)))
Run Code Online (Sandbox Code Playgroud)

但似乎必须对此进行评估以生成程序.我也尝试过:

(list lambda '() '(car (b c)))
Run Code Online (Sandbox Code Playgroud)

但这会返回一个"原始内置宏",它也不起作用.

编辑:看起来宏将用于控制评估顺序:(defmacro test1(ab)`(begin,b,a))

scheme eval guile quote

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

如何在 Firefox 11 中查看来自 http://localhost 提供的页面的 file:// 图像?

我的本地主机(端口 8080)上运行着一台服务器,它试图为本地文件创建 IMG 标签。但是,这些文件不会出现在 Firefox 11 中。

我最初是使用 Javascript 创建图像标签,但由于失败,我又转而使用 HTML 来尝试直接引用文件的各种方法。以下均无效:

<img src="file:///localhost:8080/C://Users/me/IMG_1000.JPG">
<img src="file:///localhost/C://Users/me//IMG_1000.JPG">
<img src="file:///C://Users/me/IMG_1000.JPG">
Run Code Online (Sandbox Code Playgroud)

如果我将最后一个 URL 直接粘贴到地址栏中,则图像可以正常打开。

我已按照此处的说明进行操作:

http://kb.mozillazine.org/Firefox_:_Issues_:_Links_to_Local_Pages_Don%27t_Work

我尝试过直接修改 user.js 和 prefs.js 以及通过 about:config 查看器修改。

我从“帮助”->“故障排除信息”->“配置文件目录”->“打开包含文件夹”获得了配置文件目录的正确路径。

添加的相关行是:

user_pref("capability.policy.localfilelinks.checkloaduri.enabled", "allAccess");
user_pref("capability.policy.localfilelinks.sites", "localhost:8080");
user_pref("capability.policy.policynames", "localfilelinks");
Run Code Online (Sandbox Code Playgroud)

我最初将 http:// 放在“localhost:8080”中,但 Firefox 删除了它。我也尝试了“http://localhost”和“http://127.0.0.1”,但这些也不起作用。

但是......奇怪的是,即使我从 about:config 输入它们并且可以在 prefs.js 中看到它们,我却无法从 about:config 看到它们!这让我觉得也许 mozillazine 上的信息已经过时了,毕竟它说该信息适用于“Firefox 1.5 及更高版本”,而我正在使用 Firefox 11!

注意:我想使用 file:// 访问的原因是我不想允许任意访问我的计算机上的文件。多解释一下:我有一个数据库接口,访问数据库所需的只是密码。这很好,因为我想允许任何拥有密码的人在我的机器外部访问数据库,但图像文件存在于数据库外部。为了通过服务器提供文件(因为存在的文件是动态的),我需要创建一个新的 CGI,它在数据库中采用某种标识符,但由于用户可以访问数据库,他们可以注入任何文件名他们想。

编辑:另外,我也无法 window.open() 文件 URL。这可能带来什么安全好处?

html javascript firefox file local

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

如何让SWIG自动将模拟的"this"指针包装到C结构中?

我已经实现了一个简单的C"类",在结构中使用函数指针来实现成员函数,并将指针作为每个函数的第一个参数传递给结构,类似于隐含的"this"指针. C++.

%module mytest
%{
typedef struct mytest mytest;

struct mytest {
  int data;
  int (*func1)(mytest *,int);
  void (*func2)(mytest *,int);
};

int f1(mytest *me,int n) { return me->data + n; }
void f2(mytest *me,int n) { me->data += n; }

mytest *mytestNew(int n) {
  mytest *me = (mytest*) malloc(sizeof(mytest));
  me->data = n;
  me->func1 = f1;
  me->func2 = f2;
  return me;
}

%}

typedef struct mytest mytest;

struct mytest {
  int data;
  int func1(mytest *,int);
  void func2(mytest *,int);
};

extern mytest …
Run Code Online (Sandbox Code Playgroud)

c swig struct pointers this

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

隐藏移动Firefox中的地址栏

我尝试了各种scrollTo()解决方案,它们隐藏了移动浏览器中的地址栏,但它们似乎都没有在移动Firefox中运行.

在这种情况下是否需要使用不同的技巧?

html css firefox mobile fennec

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

如何使用weinre调试https加载的页面?

我正在尝试使用weinre进行调试,并在Chrome中设置了一个简单的测试,以确保一切正常.但是,在开发人员工具中我收到错误:

"The page at 'https://myhost/...' was loaded over HTTPS, but ran insecure content from 'http://localhost:8080/target/target-script-min.js': this content should also be loaded over HTTPS.
Run Code Online (Sandbox Code Playgroud)

我已经看到了关于调试"Cordova"或"Phonegap"的其他一些答案.我没有使用这些东西中的任何一个,建议的答案似乎不适用于此.我试图只调试简单的HTML/Javascript.

我在weinre网页上没有看到启用https支持的任何提及(它明确提到它不使用https),并且我没有很多控制浏览器端(这需要在各种工作上工作)在我看来臭名昭着的android浏览器,对本地调试完全不友好,这实际上是我尝试使用weinre调试的原因),所以我不知道如何继续.由于页面传递敏感信息,因此不使用https是不可能的; 使用weinre over http是可以接受的,因为我通过ssh隧道连接.

更新:我还尝试使用boomarklet方法:我将书签网址添加到Chrome Mobile,但是当我尝试导航到书签时,它似乎卸载原始页面:我可以看到连接,但是当我看到资源,我看到的只是书签.但是,如果我尝试通过键入书签的名称来运行书签,直到标记的javascript代码出现在自动完成中,它将保留在当前页面上,但客户端页面中不会显示任何目标.我认为这是出于同样的原因,因为我看到书签正在引用http://localhost:2000.

https weinre

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

使用SQLite的新WITH RECURSIVE CTE子句

SQLite 3.8.3增加了对CTE的支持.我在这个页面上尝试了一些示例CTE,它们工作正常.但是,在阅读文档并尝试调整一些示例后,我无法创建简单的测试.

首先,我创建一个包含两个字段的简单表:idparent.这将创建一个简单的树或链接的记录列表:

CREATE TABLE test(id INTEGER PRIMARY KEY ASC,parent INTEGER);
Run Code Online (Sandbox Code Playgroud)

现在我用几行填充它:

INSERT INTO test (parent) VALUES (NULL); 
INSERT INTO test (parent) VALUES (1); 
INSERT INTO test (parent) VALUES (2); 
INSERT INTO test (parent) VALUES (3); 
Run Code Online (Sandbox Code Playgroud)

之后我有一个看起来像这样的表:

---+-------
id | parent
---+-------
 1 | NULL
 2 |  1
 3 |  2
 4 |  3
Run Code Online (Sandbox Code Playgroud)

现在我想生成沿3和1之间路径的行列表:

WITH RECURSIVE test1(id,parent) AS (
    VALUES(3,2) 
    UNION ALL 
    SELECT * FROM test WHERE test.parent=test1.id) 
SELECT * FROM …
Run Code Online (Sandbox Code Playgroud)

sqlite common-table-expression

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

无需 root 即可运行 certbot-auto

我在使用 certbot-auto 更新我的证书时遇到了权限问题,因为每当它运行时都会显示以下消息:

Requesting to rerun certbot-auto with root privileges...
Run Code Online (Sandbox Code Playgroud)

它不需要以 root 身份运行,因为运行该命令的用户拥有 certbot 使用的所有目录的权限。我找不到任何命令行选项来禁用此功能,但查看脚本本身,我发现当它重新运行时,它会检查参数 --cb-auto-has-root,如果存在,它不会尝试(再次)获取根权限。我发现如果我用这个命令运行 certbot-auto ,它就像非 root 一样运行得很好!

但我不确定是否应该使用这个解决方法 - 因为它没有记录 - 或者将来会中断。作为非 root 用户运行的推荐方法是什么?

lets-encrypt certbot

6
推荐指数
0
解决办法
575
查看次数