Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从偏移量处的文件描述符读/写_C_File Descriptor - Fatal编程技术网

C 从偏移量处的文件描述符读/写

C 从偏移量处的文件描述符读/写,c,file-descriptor,C,File Descriptor,我一直在使用and函数读取和写入给定文件描述符的文件 是否有类似的函数允许您将偏移量放入文件以进行读/写 是的,您正在寻找lseek 是的,您可以使用: lseek()函数根据指令whence将与文件描述符fd关联的打开文件的偏移量重新定位到参数offset,如下所示: SEEK\u SET 偏移量设置为偏移字节 SEEK\u CUR 偏移量设置为其当前位置加上偏移量字节 SEEK\u END 偏移量设置为文件大小加上偏移字节 你们会得到的。是的。您可以在中使用lseek功能 然后,您可以查找相

我一直在使用and函数读取和写入给定文件描述符的文件


是否有类似的函数允许您将偏移量放入文件以进行读/写

是的,您正在寻找
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);