句柄是什么?
句柄(handle)是一种标识或引用对象的方式,用来访问或操作系统底层资源。
Handle,就像门把手一样标识一个对象,并且方便操作对象。
1.windows
在windows中,句柄是对象的唯一标识符,通过句柄对对象进行操作和管理。
HWND hwnd = CreateWindow(L"Button", L"Click Me", WS_VISBLE | WS_CHILD, 10, 10, 100, 30, hwndParent, NULL, hInstance, NULL);
//L表示被定义为宽字符版本,有更好的兼容性,可以选择CreateWindowExW函数,或CreateWindowW()表明使用宽字符。
if(hwnd != NULL){
//利用句柄操作窗口对象
ShowWindow(hwnd, nCmdShow);
}
2.linux
在Linux中,一切皆文件,Linux将所有I/O操作都抽象为文件操作,因此句柄表现为文件描述符(File Descriptor),使用文件描述符来操作文件。
int fd = open("file_path.txt", O_RDONLY);
if(fd != -1){
//使用文件描述符读取文件内容
char buffer[1024];
ssize_t bytesRead = read(fd, buffer, sizeof(buffer));
//...其它操作
//关闭文件
close(fd);
}
上述代码通过read函数打开指定文件,并返回文件描述符存储在变量fd中。然后利用文件描述符fd执行I/O操作。
#include<unistd.h>
char buffer[size];//创建缓冲区
ssize_t read(int fd, void *buf, size_t count);
//三个参数:文件描述符, 接收数据的缓冲区地址, 期望读取的字节数
//返回值:实际读取的字节数
文件打开的主操作符,主操作符唯一。
主操作符参数 | 说明 |
---|---|
O_RDONLY | 只读方式打开 |
O_WRONLY | 只写方式打开 |
O_RDWR | 读写方式打开 |
文件打开的副操作符,副操作符可以同时使用多个
副操作符参数 | 说明 |
---|---|
O_APPEND | 读写文件,从文件尾部开始,写入的数据追加到文件尾部 |
O_TRUNC | 若文件以可写方式打开,会清空文件中的数据,并将文件长度记为0。即:截断写入,清空再写入 |
O_CREAT | 若路径中的文件不存在则自动创建该文件 |
O_EXCL | 如果与O_CREAT一起使用,则会检查文件是否存在,不存在则建立该文件,存在则报错。此外:同时设置O_CREAT与O_EXCL,需要将打开的文件设置为符号连接,否则打开失败。 |
文件权限标志,mode_t,是一个无符号八进制数,由三位数字组成,分别代表三类人的权限:所有者权限、同群组用户的权限、其他用户的权限。
权限数值 | 权限说明 |
---|---|
4 | 拥有读权限 |
2 | 用于写权限 |
1 | 拥有执行权限 |
如:764表示文件所有者拥有全部权限,群组用户拥有读写权限,其他用户拥有读权限。 |