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 */ };