Articles of c + +

为什么fopen errno:22当我在Android中使用冒号的文件名?

当我使用冒号的文件名像2012-12-12 12:00:00 2012-12-12 12-00-00 ,fopen将失败,错误是Invalid argument 。如果我将文件名更改为2012-12-12 12-00-00它去errno Invalid argument是什么意思? 我试图在Android运行由adb shell命令,我试着用冒号命名一个文件,它是失败的,但如果我使用vi新的命名为冒号的文件,它会正确。什么是与这?我已经检查了path,没有问题。 errno = 0; FILE *fp = fopen("/sdcard/2012-12-12 12:00:00", "a"); if (fp == NULL) { strerror(errno) // Invalid argument return; } fprintf(fp, "%s", "something"); fclose(fp);

在C / * nix中检查指定用户的文件访问权限

这是我的问题。 我需要从FreeBSD上的C代码检查特定文件和特定用户的读取权限。 我写了一段代码: #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <errno.h> int main(int argc, char *argv[]){ int r_ok; if(setuid(1002)){ printf("Cant's set uid\n"); exit(1); } r_ok = access("/tmp/dir", R_OK); printf("error: %d: %s\n", errno, strerror(errno)); printf("%d\n", r_ok); return 0; } 一般来说,它工作正常,但是当我设置/ tmp / dir的权限是这样的: d—rx— 2 root fruit1 512 Sep 10 18:20 /tmp/dir 程序输出 error: 13: Permission […]

recvmmsg()不填充msghdr.msg_namelen?

我在recvmmsg()返回后打印出msghdr.msg_namelen,但没有设置。 但是,msg_len设置正确。 我正在侦听多播stream量(即数据报)。 有什么我需要做recvmmsg()来填充msghdr? 我也试着调用recvmsg()来代替。 msghdr也不填充。 任何想法?

C / GCC:dlopen()而不需要dlsym()

我可以使用dlopen()和RTLD_NOW来延迟加载共享库。 但是,一旦库dynamic加载,仍然需要使用dlsym来单独加载每个符号。 由于我的库包含大量的API,所以我不想为它们调用dlsym。 有没有办法使API的工作方式与正常的加载时间链接相同(只需调用API而不需要dlsym)?

学习Unix和C – 查看进程,文件和v节点表

我目前正在阅读关于Unix环境下高级编程的书中的进程表,文件表和V节点表。 为了帮助我理解,能够查看进程表,文件表和v节点表以及它们之间的关系是有用的。 我在编写和debuggingc代码时如何查看这些内部结构? 我试图用ps和ls的输出将内部结构信息拼凑在一起,勾画纸上的关系来形象化结构,但是这样做很慢。 互联网上似乎有很多关于查看进程表的post,但没有查看进程表,文件表和v节点表及其关系。

在Linux中使用C映射文件debugging崩溃?

我在这里看到一个文件http://www.codeproject.com/Articles/3472/Finding-crash-information-using-the-MAP-file 。 这个例子是关于在Windows文件中看到的崩溃? 我正在寻找与在Linux系统上生成的崩溃相同的math。 如果我在Linux上遇到了崩溃,那么我将如何在像Microsoft文档这样的类似的行中debugging问题http://www.codeproject.com/Articles/3472/Finding-crash-information-using-the-MAP-file 。 请帮忙? Linux中的加载地址和代码段地址是否相同? 在链接中提到的Linux中有以下几点:“二进制的第一部分是可移植可执行文件(PE),它的长度是0x1000字节。

在编译时将用户空间C函数代码下移到内核空间?

我可能无法立即回到这个问题上,但是现在我已经遇到了,我想我会记下来: 首先,我不确定用什么方法来调用它。 我已经试过在标题中“下降”和“解决”,但我想知道是否有一个更合适的术语。 从本质上讲,我想要得到的东西就像我从内核系统调用 – ar.linux.it获得的这个图像上显示的那样 : 这里是一个更具体的例子 – 考虑下面的小而不工作( 它只会导致“断言失败” ),但可编译的ALSA代码: // atest.c #include <alsa/asoundlib.h> static snd_pcm_t *playbck_pcm_handle; static char wrsrcbuf[256] = {[0 … 255] = 5}; // initialization gcc specific static snd_pcm_uframes_t period_frames = 32; static int ret; int main() { ret = snd_pcm_writei(playbck_pcm_handle, wrsrcbuf, period_frames); return 0; } 我可以build立这个: gcc -Wall -g […]

Makefile编译内核模块以包含树源文件

我是新编译内核模块,使用makefile包含树源文件。 我已经阅读了一些教程,但仍然不足。 没有太细节,我创build了一个场景来描述问题和生成的makefile。 dir1/main.c dir2/subdir2/file.c dir2/subdir2/include/file.h 以下是生成的makefile obj-m:=main.o main-y := ../dir2/include/file.o KDIR := /home/userid/rowboat-android/kernel/ PWD := $(shell pwd) default: $(MAKE) ARCH=arm CROSS_COMPILE=/home/userid/rowboat-android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi- -C $(KDIR) SUBDIRS=$(PWD) modules clean $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean 根据描述的这个场景,这个Makefile是否正确? 参考资料讨论了ccflags-y和EXTRA_CFLAGS。 有人可以解释这些交换机的目的吗? 我的主要参考来源是 构build外部模块 Linux内核Makefiles 问题和答案Stackoverflow 预先感谢您的时间

不要vim“fork”一个shell来执行命令

我正在阅读有关进程组的APUE 。 这本书说, 在大多数作业控制shell中,在fork之后调用此函数( setpgid )以使subprocess设置自己的进程组ID。 其中一个要求是多余的,但是通过这两个过程,我们保证在任何一个过程假定发生这种情况之前,把这个孩子放到它自己的过程组中。 我写了下面这段代码来validation我的理解。 error handling被省略。 #include <unistd.h> #include <stdio.h> #include <stdlib.h> int main(void) { printf("process ID: %d\n", getpid()); printf("process group ID: %d\n", getpgrp()); exit(0); } 输出(直接运行到一个shell): 进程ID:4388 进程组ID:4388 输出(在vim中运行): process ID: 4401 process group ID: 4400 // pid of vim (through ps) 为什么结果不一样? 不要vim fork一个shell来执行命令? 如果是这样,有什么区别或换句话说,为什么进程组ID不像第一个输出那样等于进程ID? 顺便说一下, fork是否总是自动设置subprocess的进程组ID? 我试图在设置它之前打印一个subprocess的进程组ID,并打印了父进程的进程ID。 非常感谢。

如何确定Linux套接字在C ++中绑定的接口

我一直在试图弄清楚这一点。 给定一个Linux套接字,我怎么能 确定是否绑定? 如果绑定,请确定在多宿主系统上绑定哪个networking接口的子集? 总之,我有一台机器有多个网卡和一个只绑定到这些卡的一个子集的套接字。 我想以编程方式检测和logging这些接口后,他们已经被绑定,否则在我们的图书馆,这意味着我不能在绑定时访问此信息。 我还应该指出,我需要一个IPV4 / 6兼容的解决scheme,最好是适用于SCTP套接字(尽pipe我现在对于UDP或TCP解决scheme很好)