c语言
五月的天气
承认平凡 不甘平凡
展开
-
strtol函数用法
之前想用C写MD5函数用法,中间设计大量进制转换的内容,于是就查到了strtol这个函数但是发现之前对其认识上有一些偏颇,所以把它的用法记录下来strtol是一个C语言函数,作用就是将一个字符串转换为长整型long,其函数原型为long int strtol (const char* str, char** endptr, int base);str是要转换的字符enptr是指向第一个...原创 2018-10-12 09:02:07 · 10131 阅读 · 0 评论 -
库函数是用户程序和内核之间的桥梁
就像我们能够编程打印字符等操作就是调用了系统调用,但是我们没有写调用系统调用的代码,这就是库函数的功劳了。而我们只是引入了包含了库函数的头文件。比如printf函数,我们在头文件<stdio.h>中包含了printf函数的声明,但是,如果我们写一个简单的函数的话,就不用把这么一个臃肿的函数头文件都包含进来,只需要将printf的声明包含进来即可//只要把声明引入即可extern...原创 2018-11-13 21:21:43 · 228 阅读 · 0 评论 -
(*(void (*) () )shellcode) ();的含义
我们在写执行shellcode的语句的时候,可以直接写成这样的一行( * (void ( * ) () )shellcode) ()那这一行又是什么意思呢?我们来从简单的开始:typedef void (*Fun) (void)是什么意思呢?这里我们就需要了解:typedef有一个用法,可以用来定义函数指针此处 Fun 是指向这样一个函数的指针,该函数的返回值为void类型,函数没有参...原创 2018-12-07 19:49:16 · 1031 阅读 · 0 评论 -
第三章c语言整型和浮点数型
1。c语言可移植类型:stdint.h 和 inttypes.h#include&lt;stdio.h&gt;#include&lt;inttypes.h&gt;int main(int argc, char const *argv[]){ int32_t me32; scanf("%"SCNd32,&amp;me32); printf("me32 = %d原创 2018-12-20 14:09:36 · 1604 阅读 · 0 评论 -
c语言scanf与printf(c primer plus Chapter 4 )
1. C语言没有专门用于存储字符串的变量类型,字符串都是存储在char类型的数组中。字符串存放时末处的字符为"\0",即末尾要为空字符2. size of 和 strlen的区别原创 2018-12-21 20:05:55 · 290 阅读 · 0 评论 -
有符号数和无符号数(CSAPP第二章)
1.副作用和序列点副作用是对数据对象或文件的修改如 state = 50;它的副作用是使state的值变为50,其主要目的是对表达式50求值这里介绍一下,c语言中表达式是由运算符和运算对象组成,最简单的表达式是不带运算符的一个常量和变量,所以50也是表达式了。序列点是程序执行的点,在该点上所有的副作用都在进入下一步之前发生语句中的分号就标记了一个序列点~...原创 2018-12-23 09:34:05 · 685 阅读 · 0 评论 -
对scanf输入的理解
我们通过一个例子来说明一下#include<stdio.h>int main(int argc, char const *argv[]){ int a,anum,c; char b[0] ; anum = scanf("%d",&a); printf("anum = %d,a = %d\n", anum,a); scanf("%d",&c); scan...原创 2018-12-23 11:56:47 · 177 阅读 · 0 评论 -
stdarg.h头文件详解
stdarg.h是C语言中C标准函数库的标头档,stdarg是由stdandard(标准)&amp;nbsp;arguments(参数)简化而来,主要目的为让函数能够接收不定量参数。[1]C++的cstdarg标头档中也提供这样的机能;虽然与C的标头档是相容的,但是也有冲突存在。不定参数函数(Variadic functions)是stdarg.h内容典型的应用,...原创 2019-03-15 07:22:58 · 5888 阅读 · 0 评论 -
C语言中“.”与“->”有什么区别?
转载:https://farseerfc.me/zhs/dot-and-arrow-in-c.html原问题:C语言中“.”与“->”有什么区别?除了表达形式有些不同,功能可以说完全一样阿。那为何又要构造两个功能一样的运算符? 效率有差异?可是现在编译器优化都那么强了,如果真是这样岂不是有些多此一举刚刚翻了下书,说早期的C实现无法用结构直接当作参数在函数间传递,只能用指向结构的指针在函...转载 2019-03-15 09:04:28 · 3588 阅读 · 1 评论 -
c语言语法问题
原创 2019-03-16 10:55:03 · 331 阅读 · 0 评论 -
插入排序自己遇到过的一些坑
哎,说到底还是很伤心的,最简单的直接插入排序我都写不好,555…今天夜晚写了一个错的插入排序,觉得有必要记录下来void insertsort(int arr[],int n){ int i,j; for(i = 1;i<n;i++) { int e = arr[i]; //为当前要插入元素保存副本 for(j = i-1;j >= 0 ;j--) //与i的...原创 2019-03-25 09:59:00 · 544 阅读 · 0 评论 -
c语言static关键字
以前一直觉得static关键字仅仅是定义一个静态的变量,今天在看书的时候发现一切没那么简单,遂决定记录下来。static关键字原创 2019-04-03 21:06:09 · 171 阅读 · 0 评论 -
c语言之const关键字
const关键字之前我也只是简单的认为它是定义一个不能修改的变量值,但是看书的话才发现远远不仅如此。const定义一个只读变量const修饰的变量是只读的,本质还是变量const修饰的局部变量仍然是在栈上分配,可以通过指针修改其值(注意:在clang编译器上,用指针修改不会报错但是并不会修改其值,而在gcc上就会修改它的值)int main(int argc, char const *...原创 2019-04-04 08:24:01 · 11731 阅读 · 1 评论 -
System V消息队列实现的文件服务器(不跨网络)
可能是定时的部分有问题吧,导致客户端无法接收数据,不过我感觉思想是没错的。。。先pull上吧,以后发现错误再改参考资料:UNP卷二message.h#ifndef _MESSAGE_H#define _MESSAGE_H#include<stdio.h>#include<sys/msg.h>#include<errno.h>#include&l...原创 2018-11-05 10:11:04 · 149 阅读 · 0 评论 -
sizeof和strlen的区别
原文链接:https://www.cnblogs.com/carekee/articles/1630789.htmlsizeof与strlen是有着本质的区别,sizeof是求数据类型所占的空间大小,而strlen是求字符串的长度,字符串以"\0"结尾。一、sizeofsizeof(…)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指...转载 2018-11-05 09:29:53 · 122 阅读 · 0 评论 -
c语言实现cp命令
#include<stdio.h>#include<unistd.h>#include<errno.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<sys/types.h>#include<stri原创 2018-10-13 11:08:59 · 6348 阅读 · 0 评论 -
execvp函数的一个好玩的现象
05_2_2.c#include<stdio.h>#include<unistd.h>int main(int argc, char const *argv[]){ printf("05_2_2.c:\n"); printf("My pid is %d\n",getpid()); printf("My arguments: "); for(int i =...原创 2018-10-13 17:21:45 · 1790 阅读 · 0 评论 -
exec函数小总结
该总结来源于油管上的一个视频,老哥讲的太棒了,先把地址贴上,夜晚来补总结。。。(希望我能记住写总结。。)exec函数讲解原创 2018-10-13 18:04:59 · 648 阅读 · 2 评论 -
c语言实现linux下高危函数system (简易V1.0版本)
system这个函数真的是要慎用,一不小心就会留下漏洞。下面是用c语言简易的实现了一下system函数#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<errno.h>#include<sys/types.h>int main(int argc, c...原创 2018-10-15 10:16:28 · 725 阅读 · 0 评论 -
利用strrchr函数从字符串中分离字符
比如在用FIFO写单服务器多用户的程序中,要分离出用户请求行中的路径,可以用strrchr函数。#include <string.h>函数原型:extern char * strrchr (const char *s, int c)参数说明:s为一个字符串的指针,c为一个待查找字符。查找在s字符串中最后一次出现字符c的位置。用户请求行格式为 PID+ “ ”+path,要分离...原创 2018-10-17 16:53:42 · 688 阅读 · 0 评论 -
fflush(stdin)函数在linux下无效
今天在编程的时候发现一个有关fflush刷新缓冲区问题:#include<stdio.h>int main(int argc, char const *argv[]){ char c; int number; scanf("%d",&number); fflush(stdout); c = getchar(); putchar(c); return 0;}...原创 2018-10-26 10:06:41 · 1153 阅读 · 0 评论 -
makefile中删除不掉*.o文件的问题
记录自己的一个小智障如图一个简单的makefilemain:main.o add.o sub.o mux.o div.o gcc main.o add.o sub.o mux.o div.o -o mainmain.o:main.c add.h sub.h mux.h div.h gcc -c main.c -o main.oadd.o:add.c add.h gcc -c add....原创 2018-10-26 12:11:30 · 9851 阅读 · 7 评论 -
msgsnd函数 msgrcv函数的一些小问题(IPC_NOWAIT慎用!)
这两个函数别看它简单,真的是一不小心就会出错的啊报错1:msgsnd: Invalid argumentmsgrcv: Argument list too long这真的是一个最常见的错误了。。。归根究底是缓冲区长度的问题1⃣️这个问题我出错后修复之后竟然无法重现错误了。。。等我下次遇到了再补这个错误吧,反正肯定就是缓冲区长度问题。我写的代码如下,输出结果竟然为*** cbytes: ...原创 2018-10-31 16:43:10 · 11134 阅读 · 1 评论 -
linux下互斥锁实现的简单的生产者消费者问题
这个程序实现的功能很简单,也算是入门linux下的多线程编程了吧~其创造了两个生产者和一个消费者,两个生产者通过互斥锁实现同步,往缓冲区里放入数据,数据的值和其下标值一样,方便消费者的检验消费者等到生产者放完数据后,从缓冲区中取出数据,并进行检验,看是否有出现差错,没有的话即实现了同步操作/* include main */#include &lt;stdio.h&gt;#include...原创 2018-11-01 10:00:44 · 4712 阅读 · 0 评论 -
不一样的sscanf函数
今天在看UNP卷二的第九章记录上锁的时候,就突然看到了这么一行代码sscanf(line,"%ld\n",&seqno);line是一个字符数组,通过read函数和一个文件的fd参数,将这个文件内容存在了line数组里。但是,是真的不明白为什么这个函数后,就把一个long型的seqno的值设置为1了呢?我感觉好像以前用过这个函数吧,但是,我已经忘记的差不多了。。。在这个例子中我却发...原创 2018-11-03 09:44:10 · 995 阅读 · 0 评论 -
c语言函数lseek函数
原文链接:http://c.biancheng.net/cpp/html/236.html相关函数:dup, open, fseek头文件:#include <sys/types.h> #include <unistd.h>定义函数:off_t lseek(int fildes, off_t offset, int whence);函数说明:每一个已打开的文...转载 2018-11-03 17:13:04 · 1341 阅读 · 0 评论 -
fcntl函数详解
功能描述:根据文件描述词来操作文件的特性。#include &lt;unistd.h&gt;#include &lt;fcntl.h&gt;&nbsp;int fcntl(int fd, int cmd);&nbsp;int fcntl(int fd, int cmd, long arg);&nbsp;int fcntl(i转载 2018-11-03 20:23:57 · 27466 阅读 · 0 评论 -
linux下用互斥锁和条件变量来实现读写锁
以下内容来源自UNP卷二的第八章读写锁的概念( the conception of read-write lock )(1)只要没有线程持有某个给定的读写锁用于写,那么任意数目的线程可以持有该线程用于读(2)仅当没有线程持有某个给定的读写锁用于读或用于写,才能分配该读写锁用于写这种给定资源的共享访问方式也叫做共享-独占上锁因为获取一个读写锁用于读是共享锁,获取一个读写锁用于写是独占锁。...原创 2018-11-02 12:09:45 · 377 阅读 · 0 评论 -
c语言动态设定数组大小 —— 柔性数组
柔性数组:大小待定的数组c语言中结构体最后一个元素可以是未知大小的数组如:struct SoftArray{ int len; int array[]; //柔性数组,不占用存储空间};柔性数组的使用方法:(创建一个大小指定的数组并赋值打印出来)#include<stdio.h>#include<stdlib.h>//柔性数组的使用方法str...原创 2019-04-04 09:21:33 · 1864 阅读 · 0 评论