
C语言
Freiheit_ZZ
隔行隔座山,我想翻山越岭,看不一样的风景。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
函数fork与vfork的区别与联系详解
创建一个新进程的方法只有由某个已存在的进程调用fork()或vfork(),当然某些进程如init等是作为系统启动的一部风而被内核创建的。1.fork函数介绍#include <sys/types.h>#include <unistd.h>pid_t fork (void );正确返回:父进程中返回子进程的进程号;子进程中返回0;(单调用双返回函数)错误返回:-1;子进程是父进程的一个拷贝。具体说,子进程从父进程那得到了数据段和堆栈段,但不是与父进程共享而是单独分转载 2021-07-21 11:43:51 · 407 阅读 · 0 评论 -
LSB to MSB
#include <stdio.h>#include <stdlib.h>#include <string.h>void bit_rev(unsigned char *origin){ *origin = (((*origin & 0x55) << 1) | ((*origin >> 1) & 0x55)); *origin = (((*origin & 0x33) << 2) | ((*orig.原创 2021-07-19 14:40:30 · 488 阅读 · 0 评论 -
gcc编译#include <pthread.h> 失败问题
gcc编译带pthread.h头文件的源码时需要的参数原创 2021-06-18 17:26:00 · 3393 阅读 · 0 评论 -
管道原理,C语言实现
#include <unistd.h>int fd[2];void run_ls(void){ char *argv[]={"ls", "-l", NULL}; //传递给执行文件的参数数组,这里包含执行文件的参数 char *envp[]={0, NULL}; //传递给执行文件新的环境变量数组 dup2(fd[1], 1); close(fd[0]); close(fd[1]); execve("/bin/ls", argv, en...原创 2021-06-18 15:20:55 · 290 阅读 · 0 评论 -
Linux下,信号用法
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <signal.h>void sighandler(int);int main(){ signal(SIGINT, sighandler); printf("HelloWorld!\n"); while(1) { printf("running...\n"); sleep(1); }...原创 2021-06-18 14:01:24 · 116 阅读 · 0 评论 -
getopt使用方法
头文件#include <unistd.h>函数声明int getopt(int argc, char * const argv[], const char *optstring);参数argc —— 提供给主函数的参数个数argv —— 参数的字符串数组的指针optstring —— 由三部分组成,第一部分是可选的字符’+‘或’-’,第二部分是一个可选的字符’:’,第三部分是具体的选项字符串。1. 单个字符:表示选项后不带参数。2. 单个字符后接一个冒号:..原创 2021-05-27 16:37:17 · 875 阅读 · 0 评论 -
assert.h 断言使用方法
断言最主要的功能是发生bug时,查看log,定位发生错误的代码行号,以及异常值。可以和signal结合使用,在线调试。C 库宏 void assert(int expression) 允许诊断信息被写入到标准错误文件中。换句话说,它可用于在 C 程序中添加诊断。声明void assert(int expression);参数expression -- 这可以是一个变量或任何 C 表达式。如果 expression 为 TRUE,assert() 不执行任何动作。如果 exp..原创 2021-04-14 14:55:01 · 244 阅读 · 0 评论 -
signal.h 用例
signal函数声明void (*signal(int sig, void (*func)(int)))(int)参数sig -- 在信号处理程序中作为变量使用的信号码。下面是一些重要的标准信号常量:宏 信号 SIGABRT (Signal Abort) 程序异常终止。 SIGFPE (Signal Floating-Point Exception) 算术运算出错,如除数为 0 或溢出(不一定是浮点运算)。 SIGILL (Signal Illeg...原创 2021-04-14 14:44:37 · 238 阅读 · 0 评论 -
setjmp longjmp 使用方法
和goto类似,可以实现跳转。但,goto只能在当前函数内跳转,setjmp/longjmp可以任意跳转setjmp:保存上下文到buf,下次使用longjmp(),可以跳转到此处longjmp:跳转到buf变量保存的上下文处注意事项:longjmp使用前,必须先setjmp,保存上下文,才能通过longjmp跳转到保存上下文的地方。否则Segmentation fault用例:#include <stdio.h>#include <setj...原创 2021-04-14 14:16:06 · 239 阅读 · 0 评论 -
排序算法
冒泡排序void BubbleSorted(int *nums, int numsSize){ int temp; int i, j; for(i = 0; i < numsSize; i++){ for(j = i + 1; j < numsSize; j++){ if(nums[i] > nums[j]){ temp = nums[i]; nums[i原创 2021-02-16 23:31:12 · 93 阅读 · 0 评论 -
面试题 C语言
1. 题目1.1 inline代码#include <stdio.h>#define MAX(a,b) ((a)>(b)?(a):(b))int main(void){ int a = 1; int b = 0; MAX(a++,b); printf("a = %d\n", a); MAX(a++,b+10); printf("a = %d\n", a); return 0;}大家先想想运行结果是多少?-----...原创 2021-01-18 17:49:53 · 249 阅读 · 0 评论 -
链表基础_C语言
#include <stdio.h>#include <stdlib.h>typedef struct Node{ int value; struct Node *pNext;}NodeList;NodeList *createNodeList(){ NodeList *head = (NodeList*)malloc(sizeo...原创 2018-11-29 23:17:40 · 175 阅读 · 0 评论 -
关于C语言的字节对齐
小生一直认为结构体的大小就是将结构体成员的大小总和。在一次面试的时候,面试官问我:“如何求结构体的大小”,我很自信地说:“将结构体成员全部加起来”。现在回想起来,当时是多么的无知。一、概念 对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。需要字节对齐的根本原因在于CPU访问数据的效率问题。二、示例 以下是小生在64位Windows原创 2017-12-20 15:17:11 · 271 阅读 · 0 评论 -
C语言基础
int小于等于数据线宽度,size_t大于等于地址线宽度。数组和指针char *c = "abc"//类似于常量,不能更改,会出错char c[] = "abc" //c[]就是普通的字符串数组,可以更改,不会出错————————————————————————————————————————————————————结构体和指针使用动态内存分配的方式创建结构体,原创 2017-12-26 19:35:20 · 430 阅读 · 0 评论 -
圆周率pi计算
使用C语言计算圆周率的大小#include <stdio.h>#include <math.h>#define COUNT 100000000 //计算次数int main(void){ double value=0; double a=1; unsigned char i=0; while(a/2<COUNT) { if(i%2=原创 2017-12-28 18:54:29 · 924 阅读 · 0 评论 -
利用联合体判断CPU是大端模式还是小端模式
利用联合体判断CPU是大端模式还是小端模式代码块函数源代码 int CheckCPU(void) { union w { int a; char b; }c; c.a = 1; return (c.b==1); }表格判断结果: CPU模式 返原创 2017-12-10 16:40:04 · 1172 阅读 · 0 评论