Tag: linux

C Libgcrypt:无法使用libgcrypt检查数字是否为素数

我正在使用libgcrypt函数gcry_prime_check来测试数字3是否为素数。 事实certificate,根据我的function,3不是素数。 我究竟做错了什么? 这是我的代码 #include #include int main(void) { gcry_mpi_t cript_prime; gcry_error_t err; char buffer[8] = {0}; char number[8] = {0}; printf(“%s\n”, gcry_check_version ( NULL ) ); gcry_control( GCRYCTL_INIT_SECMEM, 16384, 0 ); cript_prime = gcry_mpi_new(16); strcpy(number,”3″); gcry_mpi_scan(&cript_prime,GCRYMPI_FMT_USG,number,sizeof(number),NULL); gcry_mpi_print(GCRYMPI_FMT_USG,buffer,sizeof(buffer),NULL,cript_prime); printf(“The number tested is: %s\n”,buffer); err = gcry_prime_check(cript_prime,4); if(err) { printf(“%s\n”,gcry_strerror(err)); } gcry_mpi_release(cript_prime); return 0; } 这是输出 […]

execl之前的打印在输出中不可见

#include #include #include #include #include int main(void) { pid_t Checksum_pid = fork(); if (Checksum_pid 0) { if (WIFEXITED(childStatus)) printf(“\nChild Exit Code: %d\n”, WEXITSTATUS(childStatus)); else printf(“\nChild Exit Status: 0x%.4X\n”, childStatus); } else if (returnValue == 0) printf(“\nChild process still running\n”); else { if (errno == ECHILD) printf(“\nError ECHILD!!\n”); else if (errno == EINTR) printf(“\nError EINTR!!\n”); else […]

Nf_hook_ops在分配给hook_func -C -Linux -Netfilter时返回不兼容的指针

我试图在Ubuntu 16.04 LTS上编写自己的Netfilter内核模块,我试图将hook_func分配给nfho.hook,但是我收到以下错误: error: assignment from incompatible pointer type [-Werror=incompatible-pointer-types] nfho.hook = hook_func; 我已经看过其他解决方案,大多数都是双重检查参数,包括将*skb更改为**skb 。 我已经读过,参数可能取决于内核版本,但无法找到如何找到要传递的正确参数。 我怎样才能使它工作,我如何检查应该在我的内核版本的hook_func中传递什么参数? 完整代码: #include #include #include #include #include #include #include static struct nf_hook_ops nfho; //struct holding set of hook function options // function to be called by hook unsigned int hook_func(unsigned int hooknum, struct sk_buff *skb, const struct net_device *in, […]

Linux makefile示例

嗨,我是linux的新手,我正在通过一个例子http://www.linuxforu.com/2010/12/writing-your-first-linux-driver/我正在使用Ubuntu 12.04并创建了c代码文件名为ofd.c(见下文),保存在我在〜/ Development / MyProgs / myHelloWorldLinuxModule / v2创建的目录中。 我还创建了一个Makefile(见下文),它位于同一目录中。 当我输入make时,我希望在同一目录中看到生成的.ko文件,但我得到的是一条消息“默认情况下无法完成” 我真的不懂makefile 我应该在某个地方定义KERNELRELEASE, 默认情况下实际执行的是什么行,这是否意味着在内核目录和工作目录上执行make,或者我应该将我的代码特别放在某处。 没有usr/src/linux but a /usr/src/linux-headers-3.8.0-29 ,所以我改变了这个,这是正确的。 (虽然似乎没有任何区别)。 任何帮助将不胜感激。 码: /* ofd.c – Our First Driver code */ #include #include #include static int __init ofd_init(void) /* Constructor */ { printk(KERN_INFO “Namaskar: ofd registered”); return 0; } static void __exit ofd_exit(void) /* Destructor */ […]

分配大量文件描述符

我有兴趣通过分配大量文件描述符并导致Out-of-File-Descriptor失败来关闭系统(例如15分钟)。 (别担心,我不是想破解任何东西。这是为了测试我正在编写的服务……看看它在其他程序行为不端的行为。)任何最佳做法? 我应该继续在无限循环中说fopen()吗? 15分钟后,我可以杀死这个过程? 有没有人有这方面的经验? 更新:我正在运行Linux,我正在编写的程序将具有超级用户权限。 谢谢,〜瑜伽士

帮助使用LD_PRELOAD

我想创建一个带有修改版本的printf的库,然后调用LD_PRELOAD,所以当我的程序调用printf时,它使用我的版本。 有人可以向我解释如何使用LD_PRELOAD,如果我需要在我的代码或库中做一些特殊的事情吗?

如何在同步/ fsync / syncfs到便携式设备后确保数据完整性

基于同步手册页,无法保证在调用同步后光盘将刷新其缓存:“根据标准规范(例如,POSIX.1-2001),sync()调度写入,但可能在实际写入之前返回但是,由于版本1.3.20 Linux确实在等待。(这仍然不能保证数据的完整性:现代磁盘有很大的缓存。)“ 并且,在fsync手册中,没有提到这一点。 有没有办法确保在调用同步后所有写入光盘特别是便携式设备(USB)的写入? 我遇到过调用sync / fsync后数据和元数据信息没有完全写入光盘的情况。 我很好奇Windows / linux中的“安全删除设备”是如何知道所有数据都是由设备本身完全写入的。

PCAP Ethertype返回

我试图识别我收到的数据包的以太类型。 以太类型ID为608,在Ethertype.h(libpcap 1.2.1)中没有相应的定义。 收到的大多数数据包都有8的类型,在Ethertype.h中也没有相应的定义。 有没有人知道原因可能背后是什么,或者我应该联系TCPDump与错误报告。

Linux内核:scatterlist允许的最大“长度”是多少?

解决了我的Linux加密示例,我可以正确地调用aead密码,我遇到了一个有趣的问题。 我将散点图定义为: struct scatterlist sg[2]; sg_init_table(sg, 2 ); sg_set_buf(&sg[0], address, 512); sg_set_buf(&sg[1], mac, 16); aead_request_set_crypt(req, sg, sg, 512, iv); crypto_aead_encrypt(req); 这很有效。 但是,如果你将缓冲区大小从512增加到131072,那么它将“经常”出现恐慌。 BUG: unable to handle kernel paging request at ffffeb04000cea80 IP: [] scatterwalk_done+0x50/0x60 现在,由于所有密码最终都调用了scatterwalk_函数,我认为将sg-> length设置为大的是一个问题。 据推测,它有时会越过下一页。 在这做什么是正确的? 我是否必须将其拆分为多个分散列表,确保每个分散列表都不会转到下一页? 这听起来像一个麻烦,还是有一个function为我做这个? 或者我只是需要确保每个页面都“可用”?

将参数传递给pthread_create函数

我使用pthread_create创建10个子线程,将一个整数传递给thread_func #define THREAD_NUM 10 void *thread_func(void *arg) { int v = (int)arg; printf(“v = %d\n”, v); return (void*)0; } int main(int argc, const char *argv[]) { pthread_t pids[THREAD_NUM]; int rv; int i; for (i = 0; i < THREAD_NUM; i++) { rv = pthread_create(&pids[i], NULL, thread_func, (void*)i); if (rv != 0) { perror("failed to create […]