最爱的C
文章平均质量分 72
HotIce0
小白
展开
-
Linux fopen/freopen/fdopen 函数
文章目录一、函数声明二、实例2.1 fopen2.2 fopen运行结果2.3 fdopen2.4 运行结果2.5 fclose会关闭文件句柄?2.6 运行结果一、函数声明#include <stdio.h>FILE *fopen(const char *pathname, const char *mode);// 从文件描述符创建并关联一个FILE.FILE *fdopen(int fd, const char *mode);// freopen,重新打开文件,并清除原来的定向(原创 2020-08-09 22:38:06 · 839 阅读 · 0 评论 -
Linux fflush 函数
一、函数声明#include <stdio.h>int fflush(FILE *stream);冲洗该缓冲区,即进行同步二、实例#include <stdio.h>#include <stdlib.h>#include <unistd.h>int main(int argc, char **args){ printf("hotice0"); sleep(3); printf("hotice0");原创 2020-08-09 22:13:44 · 659 阅读 · 0 评论 -
Linux setbuf/setvbuf 函数
一、函数声明#include <stdio.h>void setbuf(FILE *stream, char *buf);void setbuffer(FILE *stream, char *buf, size_t size);void setlinebuf(FILE *stream);int setvbuf(FILE *stream, char *buf, int mode, size_t size);// mode 可选值:_IOFBF 全缓冲, _IOLBF 行缓冲, _IO原创 2020-08-09 22:06:02 · 1469 阅读 · 0 评论 -
Linux fwide 函数 TODO
一、函数定义// fwide - set and determine the orientation of a FILE stream#include <wchar.h>int fwide(FILE *stream, int mode);二、实例获取文件初始的文件流方向#include <stdio.h>#include <stdlib.h>#include <wchar.h>#include <fcntl.h>#incl原创 2020-08-09 18:23:26 · 538 阅读 · 1 评论 -
Linux major/minor 函数 以及 st_dev和st_rdev区别
一、函数声明#include <sys/sysmacros.h>dev_t makedev(unsigned int maj, unsigned int min);unsigned int major(dev_t dev);unsigned int minor(dev_t dev);A device ID consists of two parts: a major ID, identifying the class of the device, and a minor ID,原创 2020-08-09 17:15:01 · 4234 阅读 · 0 评论 -
Linux chdir/fchdir/getcwd函数
文章目录一、函数声明二、实例2.1 运行结果一、函数声明// 获取当前的工作目录#include <unistd.h>char *getcwd(char *buf, size_t size);char *getwd(char *buf);char *get_current_dir_name(void);// 设置当前工作目录#include <unistd.h>int chdir(const char *path);int fchdir(int fd);二、原创 2020-08-09 16:16:35 · 354 阅读 · 0 评论 -
Linux opendir/opendirat/readdir/rewinddir/closedir 函数
文章目录一、函数声明二、实例2.1 运行结果一、函数声明//opendir#include <sys/types.h>#include <dirent.h>DIR *opendir(const char *name); // 打开文件夹。DIR *fdopendir(int fd);//readdir#include <dirent.h>struct dirent *readdir(DIR *dirp); //读取文件夹内文件信息,并且移动到文件夹内的下原创 2020-08-09 15:54:13 · 265 阅读 · 0 评论 -
Linux mkdir/mkdirat/rmdir 函数
文章目录一、函数声明二、实例2.1 运行结果一、函数声明#include <sys/stat.h>#include <sys/types.h>int mkdir(const char *pathname, mode_t mode);#include <fcntl.h> /* Definition of AT_* constants */#include <sys/stat.h>int mkdirat(int dirfd, c原创 2020-08-09 15:19:53 · 592 阅读 · 0 评论 -
Linux utimensat/futimens/utime/utimes等等 函数(修改文件时间)
一、函数声明// utimensat, futimens - change file timestamps with nanosecond precision(即都支持纳秒级)#include <fcntl.h> /* Definition of AT_* constants */#include <sys/stat.h>int utimensat(int dirfd, const char *pathname, const struct time原创 2020-08-09 00:42:14 · 1104 阅读 · 0 评论 -
Linux change time和modify time的区别
一、声明struct stat {.../* Since Linux 2.6, the kernel supports nanosecond precision for the following timestamp fields. For the details before Linux 2.6, see NOTES. */struct timespec st_atim; /* Time of last access */原创 2020-08-08 23:50:41 · 1175 阅读 · 0 评论 -
Linux symlink/symlinkat/readlink/readlinkat 函数
文章目录一、函数声明二、实例2.1 运行结果一、函数声明// symlink#include <unistd.h>int symlink(const char *target, const char *linkpath);#include <fcntl.h> /* Definition of AT_* constants */#include <unistd.h>int symlinkat(const char *target, i原创 2020-08-08 23:41:10 · 744 阅读 · 0 评论 -
Linux rename/renameat 函数
文章目录一、函数定义1.1 函数的简单说明二、实例2.1 文件重命名2.2 (文件重命名)运行结果2.3 文件移动并重命名(验证)2.4 (文件移动并重命名)运行结果一、函数定义#include <stdio.h>int rename(const char *oldpath, const char *newpath);#include <fcntl.h> /* Definition of AT_* constants */#include <s原创 2020-08-08 19:07:58 · 1394 阅读 · 0 评论 -
Linux unlink/unlinkat/remove 函数
一、函数声明#include <unistd.h>int unlink(const char *pathname);#include <fcntl.h> /* Definition of AT_* constants */#include <unistd.h>int unlinkat(int dirfd, const char *pathname, int flags);二、实例2.1 基本使用(删除文件,与目录)2.1.1 u原创 2020-08-08 15:15:40 · 2935 阅读 · 0 评论 -
Linux link/linkat 函数
文章目录一、函数定义二、实例2.1 运行结果一、函数定义#include <unistd.h>int link(const char *oldpath, const char *newpath);#include <fcntl.h> /* Definition of AT_* constants */#include <unistd.h>int linkat(int olddirfd, const char *oldpath,原创 2020-08-07 00:16:11 · 1542 阅读 · 0 评论 -
Linux truncate/ftruncate 函数
一、函数声明#include <unistd.h>#include <sys/types.h>int truncate(const char *path, off_t length);int ftruncate(int fd, off_t length);功能:直接截短文件的大小,将文件的长度缩小为length指定的长度。二、实例#define __USE_XOPEN_EXTENDED#define __USE_FILE_OFFSET64#include原创 2020-08-05 21:11:55 · 600 阅读 · 0 评论 -
Linux chmod/fchmod/fchmodat 函数
一、函数声明#include <sys/stat.h>int chmod(const char *pathname, mode_t mode);int fchmod(int fd, mode_t mode);#include <fcntl.h> /* Definition of AT_* constants */#include <sys/stat.h>int fchmodat(int dirfd, const char *pathn原创 2020-08-04 07:19:55 · 575 阅读 · 0 评论 -
Linux umask 函数
一、函数声明#include <sys/types.h>#include <sys/stat.h>mode_t umask(mode_t mask);umask() sets the calling process’s file mode creation mask (umask) to mask & 0777The umask is used by open(2), mkdir(2), and other system calls that crea原创 2020-08-04 07:01:25 · 412 阅读 · 0 评论 -
Linux access/faccessat/eaccess 函数
文章目录一、函数声明二、实例2.1 前置准备2.2 未设置S_ISUID运行结果2.3 设置S_ISUID运行结果三、其他一、函数声明https://man7.org/linux/man-pages/man2/access.2.html中的定义#include <unistd.h>int access(const char *pathname, int mode);#include <fcntl.h> /* Definition of AT_*原创 2020-08-03 22:25:50 · 1260 阅读 · 0 评论 -
Linux S_ISUID/ S_ISGID
一、声明#define S_ISUID __S_ISUID /* Set user ID on execution. */#define S_ISGID __S_ISGID /* Set group ID on execution. */二、作用举例子:passwd,原理是通过修改/etc/shadow文件从而实现用户账号密码的修改。而shadow文件只有root用户可以修改的。那普通用户为什么可以通过passwd修改字节的账号密码呢。其原理其实就是,passwd程序st_mode被设置了原创 2020-08-02 19:31:31 · 1273 阅读 · 0 评论 -
Linux stat获取文件类型
一、函数声明#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>int stat(const char *pathname, struct stat *statbuf);int fstat(int fd, struct stat *statbuf);int lstat(const char *pathname, struct stat *statbuf);#include <f原创 2020-08-02 18:42:20 · 496 阅读 · 0 评论 -
Linux ioctl 函数
一、函数声明#include <sys/ioctl.h>int ioctl(int fd, unsigned long request, ...);额外的操作,工具箱二、原创 2020-08-02 16:49:25 · 210 阅读 · 0 评论 -
Linux fcntl F_SETLKW实现超时返回
文章目录一、函数声明二、fcntl,F_SETLKW超时返回原理依据三、实现方式3.1 通过alarm函数最基础的实现3.1.1 运行结果(失败)3.1.2 查找原因3.1.3 重新封装后的_signal函数3.1.3 (运行结果)重新封装后的_signal函数3.1.4 优化后的fcntl超时返回3.1.5 (运行结果)优化后的fcntl超时返回以下所有代码都是ubuntu20.4系统下运行测试通过一、函数声明#include <unistd.h>#include <fcnt原创 2020-08-02 16:25:52 · 1563 阅读 · 0 评论 -
Linux fcntl 函数全解
文章目录一、函数声明1.1 cmd可选值注意:二、实例2.1 F_DUPFD / F_DUP_CLOEXEC(Duplicating a file descriptor)2.2 F_GETFD / F_SETFD(File descriptor flags)2.3 F_GETFT / F_SETFT (File status flags)2.4 F_SETLK / F_SETLKW / F_GETLK (Advisory record locking)2.4.1 更多关于文件锁的内容可以查看我的另一篇博客原创 2020-07-31 01:33:07 · 1282 阅读 · 0 评论 -
Linux fcntl与文件锁
文章目录一、基本概念2.1 基础2.2 文件锁(读锁,写锁)2.2 加锁范围(实际上就是锁的粒度)二、相关函数和数据结构声明三、实例3.1 F_SETLK验证:写的时候不可以读。没写的时候可以同时读。3.1.1运行结果3.2 struct flock 中的pid参数3.3 F_GETLK 文件加锁信息的获取3.3.1 运行结果3.3.2 如果,l_start, l_len指定的范围中有两个不同的锁呢。信息会返回什么3.4 F_GETLKW 与F_GETLK的区别3.4.1 验证一下 F_GETLKW3.4.原创 2020-07-31 01:30:39 · 698 阅读 · 0 评论 -
Linux fcntl中FD_CLOEXEC 作用
文章目录一、FD_CLOEXEC 说明二、实例2.1 当启动CLOSEXEC时2.2 当关闭CLOSEXEC时一、FD_CLOEXEC 说明FD_CLOSEXEC是文件描述符的标志位之一(标志位现在只有这一个)。意思是,标志当前文件描述符,在执行exec时(exec指定的程序执行之前),是否关闭该文件描述符。二、实例因为要用到exec这里,我们就写两个程序。并且由于子程序的标准输出,不连接到terminal。所以我们把内容打印到文件中。// fcntl.c主程序代码#include <f原创 2020-07-30 01:06:36 · 2513 阅读 · 0 评论 -
Linux sync/fsync/fdatasync 函数
一、函数声明#include <unistd.h>int fsync(int fd);int fdatasync(int fd);void sync(void);二、意义sync,将所有修改过的缓冲区块,排入到写队列。就立即返回。【并不等待系统的update守护进程,将数据写入到物理硬盘】update守护进程会周期性的执行磁盘写入任务。【延迟写】fsync,将等待update将数据写入到物理硬盘后才返回。fdatasync,等待update将数据写入到物理硬原创 2020-07-29 23:09:26 · 923 阅读 · 0 评论 -
Linux dup/dup2 函数
一、函数声明#include <unistd.h>int dup(int oldfd);int dup2(int oldfd, int newfd);二、解释dup将复制oldfd文件描述符,返回新的描述符dup2将复制oldfd到指定的newfd上,如果newfd有已经存在的描述符则关闭(如果oldfd==newfd就不会关闭)三、实例#include <stdio.h>#include <unistd.h>#define FD_STDOUT原创 2020-07-29 21:52:33 · 413 阅读 · 0 评论 -
Linux pwrite/pread 函数
一、函数声明#include <unistd.h>ssize_t pread(int fd, void *buf, size_t count, off_t offset);ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset); 二、解释pread其实是lseek和read的组合成的原子操作。(通过一次系统调用完成,lseek和read)write同理。lseek和write三、实例#inclu原创 2020-07-29 21:11:38 · 1949 阅读 · 0 评论 -
Linux open/openat/creat/lseek 函数
一、头文件以及声明#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>// 打开文件int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);// 创建文件int creat(const char *pathname, mode_t mode);原创 2020-07-28 00:01:28 · 357 阅读 · 0 评论 -
ptrace反调试
ptrace PTRACE_ATTACH可以附加到目标进程上,对其进行调试。反调试的方式跟踪自己:因为,一个进程在同一时间只能被一个进程跟踪。如果进程在启动时,就调用ptrace PTRACE_TRACEME跟踪了自己。那么这个进程将无法被其他进程附加。如果对方调用的是exec()的时候,暂停你的程序呢。这个时候调用ptrace跟踪。也就是在你调用ptrace之前。这种情况很好解决...原创 2018-10-03 16:07:43 · 2939 阅读 · 0 评论 -
[ptrace修改内存]实现进程代码注入
一、背景ptrace是Unix系列系统的系统调用之一。其主要功能是实现对进程的追踪。对目标进程,进行流程控制,用户寄存器值读取&amp;amp;amp;amp;amp;amp;amp;写入操作,内存进行读取&amp;amp;amp;amp;amp;amp;amp;修改。这样的特性,就非常适合,用于编写实现,远程代码注入。大部分的病毒会使用到这一点,实现,自用空间注入,rip位置直接注入,text段与data段之间的空隙注入。二、主要流程实验使用的方式是,直接rip原创 2018-09-26 08:50:32 · 8476 阅读 · 1 评论 -
ptrace的常用参数使用
一、关于ptraceptrace是一种系统调用。p也就是process进程,trace追踪。也就是进程追踪。用于对进程的执行进行干涉以及寄存器状态(值)的读取以及设置,内存的写入与读取。比如,我们常用的Linux下的gdb调试。这个程序的主要功能实现就是通过ptrace系统调用。#include &lt;sys/ptrace.h&gt;long ptrace(enum __ptrace_re...原创 2018-09-23 15:35:38 · 2318 阅读 · 0 评论 -
GUN C内联汇编
一、背景在Linux内核的代码中,大部分以C内联汇编编写。在编写病毒时,也会常常用到,比如,要编写一个不依赖libc的注入代码时,需要调用mmap进行内存申请时,就要使用到syscall进行系统调用。这时就需要使用到C语言的内联汇编。static inline volatile int evil_open(const char *path, unsigned long flags)...原创 2018-09-23 14:57:50 · 1613 阅读 · 0 评论 -
Socket编程之一个端口能建立多个TCP连接?
个人博客:www.saoguang.top一、背景记得上学期暑假的时候我基于MFC写了一个简单的聊天程序。那个聊天程序,两部分组成,监听客户端请求线程和客户端请求处理线程。1.服务器接收到登陆请求,验证登陆信息后,如果通过验证建立新线程与其交互,并通知用户连接到新的端口,并创建好新端口的SOCKET连接。2.然后将用户类和新端口传给新建立的客户端请求处理线程。当时,可能是没理解...原创 2018-05-14 12:53:34 · 66102 阅读 · 21 评论 -
C MYSQL 数据库操作Demo
个人博客:www.saoguang.top一丶环境:IDE : Visual Studio 2017OS : Windows 10 64-bit 1709Connector C version : 6.1.11 32-bit 二丶准备工作:1.从官网下载好Mysql Connector C 这里提供链接 Mysql Connector/C2.配置项目...原创 2017-12-16 17:26:48 · 2464 阅读 · 0 评论 -
C__va_list变参数处理
printf这个学C语言第二个用的函数,(第一个是main,哈哈哈)。对于它的参数。int printf(char const* const _Format, ...)这里的...可以输入若干个参数,这究竟是如何实现的呢?代码一敲就能搞清楚了。int CountParams(int iV, ...){ va_list pArgsList; int * pInt = &iV; prin原创 2017-12-10 20:36:54 · 582 阅读 · 0 评论