Tag: posix

Posix是否为printf / scanf提供格式字符串宏?

printf和scanf系列函数使用了少数与基本数据类型相对应的原始格式说明符 – %d表示int , %llu表示unsigned long long int等。 但是,有很多标准化的类型别名需要在实践中使用,例如int32fast_t ,而且不能也不应该知道底层的基本类型。 对于stdint.h的别名,C标准谢天谢地指定了一组宏来生成相应的格式字符串,如PRI32 ,在inttypes.h 。 Posix有一组类似的宏吗? Posix有大量的不透明类型,如ssize_t , pid_t , rlim_t , suseconds_t等,它们都是基本整数类型的变体。 如何在格式字符串中可移植地使用这些类型?

读/ dev / urandom线程安全吗?

这是代码: unsigned int number; FILE* urandom = fopen(“/dev/urandom”, “r”); if (urandom) { size_t bytes_read = fread(&number, 1, sizeof(number), urandom); DCHECK(bytes_read == sizeof(number)); fclose(urandom); } else { NOTREACHED(); } 如果没有,我如何使其线程安全?

如果调用fclose(0),这会关闭stdin吗?

如果调用fclose(0),这会关闭stdin吗? 我问这个的原因是由于某种原因,stdin在我的应用程序中被关闭,我无法找出原因。 我检查了fclose(stdin),这不在应用程序中,所以我想知道fclose(0)是否会导致未定义的行为,如关闭stdin? 如果没有,stdin可能被错误关闭的其他方式是什么?

C中的非繁忙阻塞队列实现

我试图在C中实现一个队列,导致进程非忙等待,直到队列中有一个元素要消耗。 我尝试过两种不同的尝试来实现这一目标。 我遇到的第一个问题是,如果enqueue / dequeue操作有条件检查边界( if (q-> count == QUEUESIZE)),对sem_wait的调用将立即返回,因为没有其他进程获得锁定。 如果我将条件更改为while (q-> count == QUEUESIZE),我相信消费者进程将“忙等待”,直到生产者进程发布信号量,这不是我实现的目标,并通过测试,我发现消费者进程不会获得锁定并继续。 我认为我很接近,但我似乎无法弄清楚如何解决这些问题。 我考虑过添加条件变量或pthread_mutex,但是在添加额外的复杂性之前想要耗尽信号量选项。 #define QUEUESIZE 48 typedef struct { char q[QUEUESIZE+1][150]; int first; int last; int count; sem_t *lock; } Queue; init_queue(Queue *q, sem_t *l) { q->first = 0; q->last = QUEUESIZE-1; q->count = 0; q->lock = l; } enqueue(Queue *q, […]

程序在单独的线程上打印奇数和偶数

我正在学习使用pthreads编程。 如何编写程序在单独的线程上打印奇数和偶数。

OSX缺乏memalign

我正在研究C中的一个项目,它需要memalign()。 真的,posix_memalign()也会这样做,但是darwin / OSX缺乏这两者。 什么是鞋拔的好方法? 我不理解posix-C代码的许可,如果我要删掉memalign.c并把它放在我的项目中 – 我不希望任何病毒式许可LGPL-ing我的整个项目。

为什么在使用gcc和std = c99进行编译时找不到getaddrinfo

我有以下代码,我试图编译。 当我尝试使用std = c99时,它失败并发出有关“类型struct addrinfo的隐式声明”和“函数getaddrinfo的隐式声明”的警告。 它适用于std = gnu99。 #include #include #include int fails(const char *host, const char *port, struct addrinfo *hints) { int rc; struct addrinfo *results; // can’t find this function?? rc = getaddrinfo(host, port, hints, &results); // free memory in this important application freeaddrinfo(results); return rc; } 我用来编译的命令是: gcc -c -o fail.o -Wall […]

waitpid,wnohang,wuntraced。 我该如何使用它们

我有点困惑。 据我了解,waitpid的pid为-1意味着我等待所有孩子完成但是如果我在WNOHANG的waitpid中添加一个选项,那么如果没有完成,那些选项会立即退出……这些似乎非常令人困惑。 为什么我要告诉计算机等待子进程完成然后立即告诉它如果没有孩子完成就立即退出? 有人可以解释这个选项和WUNTRACED选项吗? 我不知道被追查是什么意思。

信号处理和sigemptyset()

任何人都可以用一种非常简单的方式来解释sigemptyset()的作用吗? 为什么有用? 我读了一堆定义,但我只是不明白。 从我收集的内容中,它跟踪用于阻止目的的信号? 我不太清楚我明白为什么那会有用。 是这样我们不能递归地得到那个特定的信号吗? 使用sigemptyset()的基本示例: #include #include #include int main(){ struct sigaction act; sigemptyset(&act.sa_mask); act.sa_handler=function_name; act.sa_flags=0; sigaction(SIGINT, &act, 0); }

何时使用poll C函数的POLLOUT事件?

我用socket() + POLLIN poll() + recv() + send()编写了一个小型TCP服务器,但我不知道何时使用POLLOUT轮询或选择writefds来轮询可写事件。 谁能给我一个POLLOUT真正用法的例子 ?