Category Archives: 计算机系统编程

System Programming

Linux系统编程之查看文件大小的三种方法(lseek、fseek和stat函数)

Linux系统编程之查看文件大小的方法,以前发过两种方法,即使用lseek和stat函数。今天再补充一种方法,即使用fseek和ftell函数实现。

#include <sys/types.h>
#include <unistd.h>
 
off_t lseek(int fd, off_t offset, int whence);
#include <stdio.h>

int fseek(FILE *stream, long offset, int whence);
long ftell(FILE *stream);
#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);

Continue reading

Linux系统编程之C语言库函数大全

第1章 字符测试函数
isalnum(测试字符是否为英文字母或数字)
isalpha(测试字符是否为英文字母)
isascii(测试字符是否为ascii码字符)
isblank(测试字符是否为空格字符)
iscntrl(测试字符是否为ascii码的控制字符)
isdigit(测试字符是否为阿拉伯数字)
isgraph(测试字符是否为可打印字符)
islower(测试字符是否为小写英文字母)
isprint(测试字符是否为可打印字符)
isspace(测试字符是否为空格字符)
ispunct(测试字符是否为标点符号或特殊符号)
isupper(测试字符是否为大写英文字母)
isxdigit(测试字符是否为16进制数字)
Continue reading

Linux系统编程之获取/dev/input目录下的event对应的键盘设备

我们在Linux操作系统下使用input子系统时,键盘会有一个对应的/dev/input/event接口。可以通过ioctl函数来读取键盘设备名,因为每一个设备名是固定的,再根据设备名区分event。我的系统是Fedora 32,共有20个event接口,如下:

[root@fedora Workspace]# ls /dev/input/event*
/dev/input/event0   /dev/input/event15  /dev/input/event4
/dev/input/event1   /dev/input/event16  /dev/input/event5
/dev/input/event10  /dev/input/event17  /dev/input/event6
/dev/input/event11  /dev/input/event18  /dev/input/event7
/dev/input/event12  /dev/input/event19  /dev/input/event8
/dev/input/event13  /dev/input/event2   /dev/input/event9
/dev/input/event14  /dev/input/event3

Continue reading

Linux系统编程之gcc编译器动态库的制作和使用

动态链接库与普通的程序相比而言,没有main函数,是一系列函数的实现。通过shared和fPIC编译参数生产so动态链接库文件。程序在调用库函数时,只需要连接上这个库即可。这篇文章主要介绍了Linux动态库的制作和使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值。
Continue reading

Linux系统编程之gcc编译器静态库的制作和使用

根据链接时期的不同,库有静态库和动态库之分。静态库是在链接阶段被链接的,所以生成的可执行文件就不受库的影响,即使库被删除,程序依然可以成功运行。本文给大家示例说明一下gcc编译器如何编译和使用静态库。

一、静态库文件命名规范
静态库文件名的命名规范是以lib为前缀,紧接着跟静态库名,扩展名为.a。例如:我们将创建的静态库名为demo,则静态库文件名就是libdemo.a。执行:ar rcs libdemo.a demo.o,生成libdemo.a文件。
Continue reading

Pthread多线程编程之互斥量与条件变量的使用

一、 互斥量(Mutex Variables)

Creating and Destroying Mutexes

int pthread_mutex_init(pthread_mutex_t *restrict, const pthread_mutexattr_t *restrict);
// 初始化互斥锁

int pthread_mutex_destroy(pthread_mutex_t *);
// 删除互斥锁

int pthread_mutexattr_init(pthread_mutexattr_t *);
// 初始化互斥锁属性

int pthread_mutexattr_destroy(pthread_mutexattr_t *);
// 删除互斥锁属性

Continue reading