2K+ 次浏览
信号量是进程或线程同步的概念。在这里,我们将了解如何在实际程序中使用信号量。在 Linux 系统中,我们可以获得 POSIX 信号量库。要使用它,我们必须包含 semaphores.h 库。我们必须使用以下选项编译代码:gcc program_name.c –lpthread -lrt。我们可以使用 sem_wait() 来锁定或等待。并使用 sem_post() 来释放锁。信号量初始化 sem_init() 或 sem_open() 用于进程间通信 (IPC)。示例 #include <semaphore.h> #include <pthread.h> #include <stdio.h> #include <stdlib.h> sem_t mutex; void* thread(void* arg) { //充当线程的函数 sem_wait(&mutex); //等待状态 ... 阅读更多
1K+ 次浏览
在这里,我们将了解如何在 C 语言中创建自毁代码。自毁代码基本上是执行代码,然后在执行后删除可执行文件。这项任务非常简单。我们需要获取可执行文件名才能将其删除。我们可以使用命令行参数。argv[0] 将保存可执行文件名。然后使用 remove() 函数我们可以删除它。在程序中,我们可以看到在删除该文件后打印一行。所以现在问题来了,当前文件不存在时,下一行是如何执行的?实际上,整个转换的... 阅读更多
216 次浏览
在 C++11 中,引入了 lambda 表达式。Lambda 表达式基本上是代码的一部分,可以嵌套在其他函数调用语句中。通过将 lambda 表达式与 auto 关键字结合使用,以后可以再次使用它们。在 C++14 中,这些 lambda 表达式得到了改进。在这里,我们可以得到泛型 lambda 表达式。例如,如果我们想创建一个可以添加整数、添加数字以及连接字符串的 lambda 表达式,那么我们必须使用此泛型 lambda 表达式。lambda 表达式的语法如下所示:[](auto x, auto y) { return x + y; }让我们来看一个例子,以便更好地理解。示例 #include <iostream> ... 阅读更多
3K+ 次浏览
在这里,我们将了解如何使用 C 语言在给定范围内生成随机数。为了解决这个问题,我们将使用 srand() 函数。当前时间将用于播种 srad() 函数。此函数无法在任何范围内生成随机数,它只能生成 0 到某个值之间的数。因此,我们必须遵循一个技巧。我们将生成 0 到 (上限 - 下限 + 1) 之间的随机数,然后添加下限进行偏移。示例 #include <stdio.h> #include <stdlib.h> #include <time.h> void generate_random(int l, int r, int count) { //这将生成随机数 ... 阅读更多
要创建高精度计时器,我们可以使用 chrono 库。此库具有高分辨率时钟。这可以以纳秒为单位计数。在这个程序中,我们将看到以纳秒为单位的执行时间。我们首先获取时间值,然后在最后获取另一个时间值,然后找到差值以获取经过的时间。在这里,我们使用空循环来暂停一段时间的影响。示例 #include <chrono> #include <iostream> typedef std::chrono::high_resolution_clock Clock; main() { auto start_time = Clock::now(); for(int i = 0; i <
分段错误是一种运行时错误,它是由内存访问冲突引起的,例如访问无效的数组索引、指向某些受限地址等。在本文中,我们将了解如何使用 GDB 工具检测此类错误。让我们看看代码和查找错误的步骤。示例 #include <stdio.h> main() { int* ptr = NULL; *ptr = 1; //尝试访问未知内存位置 printf("%p", ptr); }使用“gcc –g program_name.c”编译代码,并使用“./a.out”运行输出soumyadeep@soumyadeep-VirtualBox:~/Cpp_progs$ ./a.out Segmentation fault (core dumped)发生了分段错误。编写“gdb ./a.out core”soumyadeep@soumyadeep-VirtualBox:~/Cpp_progs$ gdb ... 阅读更多
147 次浏览
mbrtowc() 函数用于将多字节序列转换为宽字符字符串。这将返回多字节字符的长度(以字节为单位)。语法如下所示。mbrtowc (wchar_t* wc, const char* s, size_t max, mbstate_t* ps)参数为:wc 是指向将存储结果宽字符位置的指针。s 是指向作为输入的多字节字符字符串的指针max 是 s 中可以检查的最大字节数ps 指向转换状态,用于解释多字节字符串。示例 #include <stdio.h> #include <stdlib.h> using namespace std; void display(const char* s) { mbstate_t ps = mbstate_t(); // 初始化 ... 阅读更多
8K+ 次浏览
getopt() 是用于获取命令行选项的内置 C 函数之一。此函数的语法如下所示:getopt(int argc, char *const argv[], const char *optstring)opstring 是字符列表。每个字符代表一个单字符选项。此函数返回多个值。这些如下所示:如果选项取值,则该值将由 optarg 指向。当没有更多选项要处理时,它将返回 -1返回“?”以显示这是一个无法识别的选项,它将其存储到 optopt 中。有时某些选项需要一些值,如果... 阅读更多
12K+ 次浏览
在 C 或 C++ 中,我们会遇到各种错误。这些错误可以分为五种不同的类型。这些如下所示:语法错误运行时错误链接器错误逻辑错误语义错误让我们逐一了解这些错误:语法错误当违反 C++ 编写技术或语法的规则时,就会发生这种错误。这种错误通常在编译前由编译器指示。有时这些被称为编译时错误。在这个例子中,我们将看到如果我们不在一行后放置分号,如何获得语法错误。示例 #include <stdio.h> main() { printf("Hello World") }输出Error] expected ... 阅读更多
在 C 语言中,我们得到了 qsort() 函数。这用于使用快速排序技术对某些数组进行排序。在此函数中,我们必须传递比较函数。此比较函数接受两个参数。然后比较它们并获取它们之间的相对顺序。这两个参数是指针,并转换为 const void* 类型。语法如下所示:int comparator(const void* p1, const void* p2);返回值有三种类型:小于 0。p1 指向的元素将位于第二个元素之前。等于 0。两个值相同。大于 0。p1 指向的元素将... 阅读更多