C 从偏移量处的文件描述符读/写
我一直在使用and函数读取和写入给定文件描述符的文件C 从偏移量处的文件描述符读/写,c,file-descriptor,C,File Descriptor,我一直在使用and函数读取和写入给定文件描述符的文件 是否有类似的函数允许您将偏移量放入文件以进行读/写 是的,您正在寻找lseek 是的,您可以使用: lseek()函数根据指令whence将与文件描述符fd关联的打开文件的偏移量重新定位到参数offset,如下所示: SEEK\u SET 偏移量设置为偏移字节 SEEK\u CUR 偏移量设置为其当前位置加上偏移量字节 SEEK\u END 偏移量设置为文件大小加上偏移字节 你们会得到的。是的。您可以在中使用lseek功能 然后,您可以查找相
是否有类似的函数允许您将偏移量放入文件以进行读/写 是的,您正在寻找
lseek
是的,您可以使用:
lseek()
函数根据指令whence
将与文件描述符fd
关联的打开文件的偏移量重新定位到参数offse
t,如下所示:
SEEK\u SET
偏移量设置为偏移字节
SEEK\u CUR
偏移量设置为其当前位置加上偏移量字节
SEEK\u END
偏移量设置为文件大小加上偏移字节
你们会得到的。是的。您可以在中使用
lseek
功能
然后,您可以查找相对于文件开始或结束或相对于当前位置的任何偏移
不要被图书馆的那一页弄得不知所措。以下是一些简单的用法示例,可能是大多数人都需要的:
lseek(fd, 0, SEEK_SET); /* seek to start of file */
lseek(fd, 100, SEEK_SET); /* seek to offset 100 from the start */
lseek(fd, 0, SEEK_END); /* seek to end of file (i.e. immediately after the last byte) */
lseek(fd, -1, SEEK_END); /* seek to the last byte of the file */
lseek(fd, -10, SEEK_CUR); /* seek 10 bytes back from your current position in the file */
lseek(fd, 10, SEEK_CUR); /* seek 10 bytes ahead of your current position in the file */
祝你好运 有一些函数可以接受文件偏移量:
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);
我以为是lseek,你应该找到。到底“从哪里来”是什么意思?我对它使用的“洞”和“数据”感到有点困惑。数据是否为非零值和孔的零值?
从何处
控制偏移的相对位置。因此,如果您使用SEEK\u SET
请求10个字节,则距离文件开头10个字节。如果然后使用SEEK\u CUR
请求6个字节,则距离文件开头将为16个字节。不要担心间隙和漏洞。这是在处理这样一种情况,即您查找的内容超过了文件的结尾。此答案为+1。对于多线程程序,pread()
和pwrite()
更好,因为它们不会影响文件偏移量(因此多个线程可以从同一个文件描述符读取,而无需任何锁定,也无需在lseek()
和read()
之间存在争用条件)。也只有一个系统调用!
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);