user space syscall/library API misc
user space syscall/library API misc
get thread name
get thread name:
char threadname[20] = {'\0'};
prctl(PR_GET_NAME,(unsigned long)threadname);
get pid:
getpid()
get TID of a process(value would like 3245):
syscall(SYS_gettid)
tgkill()
这个glibc没有给它warpper,如需调用,需要通过syscall()的方式:
syscall(SYS_tgkill, tgid, tid, sig)
文件读写指针
open一个文件后,文件的读写指针此时是在文件的末尾的,就是在append write开始写的位置,
所以如果需要读文件开头处的内容,需要调用lseek()先将读写指针指向文件开头:
lseek(fd, 0, SEEK_SET)
lseek()
SEEK_SET:从文件开头处偏移offset个byte,此时offset只能是offset >= 0,即只能往前偏移
SEEK_CUR:基于文件当前读写指针位置偏移offset个byte,offset小于0,则是往后偏移;如果大于0,则往前偏移
SEEK_END:基于文件末尾偏移offset个byte,offset小于0,则是往后偏移;如果大于0,则往前偏移
上述这里的往后、前的含义以append write的方向为参考,append write的方向是往前
off_t lseek(int fd, off_t offset, int whence)
lseek()返回值是设置读写指针位置后的读写指针位置(offset),如果fail返回-1
lseek()常用用法
用法 | 含义 |
lseek(fd, 0, SEEK_CUR) | 获取当前读写指针位置(offset) |
lseek(fd, 0, SEEK_SET) | 将读写指针指向文件开头 |
lseek(fd, 0, SEEK_END) | 将读写指针移动到文件末尾 |
open/read/write
unsigned char buffer[50] = {0}; unsigned char read_buf[50] = {0}; /* open */ fd = open("/data/wksrcconf.txt", O_RDWR|O_APPEND|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); /* write */ memset(buffer, 0, 50); sprintf(buffer, "stWakeSrc: %d.\n", stWakeSrc); write(fd, buffer, strlen(buffer)+1); /* read */ offset = lseek(fd, 0, SEEK_CUR); //save rw pointer/offset lseek(fd, 0, SEEK_SET); //set rw pointer/offset to file start cnt = read(fd, read_buf, 6); //read content from file start lseek(fd, offset, SEEK_SET); //restore rw pointer/offset printf("read_buf is %s.\n", read_buf);
关于open()参数的说明(可执行man 2 open查看detail)
O_APPEND: 表示write时追加写
O_CREAT: 表示文件不存在时创建此问题,此时需要传入第三个参数mode_t mode
S_IRWXU|S_IRWXG|S_IRWXO: 表示用户、group、other组均有RWX权限
获取系统时间(Y/M/D/H/M/S)
unsigned char buffer[50] = 0; time_t ltime; time(<ime); sprintf(buffer, "%s", asctime(gmtime(<ime))); printf("sys time is %s.\n", buffer);
上面获取的sys time如下面的格式:
Sun Sep 25 00:22:09 2022
user space获取系统uptime(kernel log前的uptime时间戳)
unsigned char buffer[50] = {0}; struct sysinfo info = {0}; sysinfo(&info); sprintf(buffer, "[%ld]:\n", info.uptime);
struct sysinfo definition如下:
struct sysinfo { long uptime; /* Seconds since boot */ unsigned long loads[3]; /* 1, 5, and 15 minute load averages */ unsigned long totalram; /* Total usable main memory size */ unsigned long freeram; /* Available memory size */ unsigned long sharedram; /* Amount of shared memory */ unsigned long bufferram; /* Memory used by buffers */ unsigned long totalswap; /* Total swap space size */ unsigned long freeswap; /* swap space still available */ unsigned short procs; /* Number of current processes */ unsigned long totalhigh; /* Total high memory size */ unsigned long freehigh; /* Available high memory size */ unsigned int mem_unit; /* Memory unit size in bytes */ char _f[20-2*sizeof(long)-sizeof(int)]; /* Padding to 64 bytes */ };
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
2020-05-02 SecureCRT sysrq键设置
2020-05-02 sysrq