Bonjour à tous,
J'essaie de faire un lseek sur un tube.
Je comprends que cela ne fonctionne pas car le pipe fonction en flux de données donc impossible de positionner le "curseur". En lecture je le comprends mais en écriture est-ce possible ?
J'aimerai avoir des éléments théoriques pour le comprendre.
J'ai fait ce petit programme pour ma démonstration :
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #include "sys.h" int main(void) { // cette variable contiendra les descripteurs de lecture [0] et écriture [1] du tube int tube[2]; // création du tube assert(pipe(tube) == 0); int ret_lseek = 0; // Tentative d'utiliser lseek sur le descripteur de lecture ret_lseek = lseek(tube[0], 1, SEEK_CUR); printf("La fonction lseek sur le descripteur de lecture retourne : %d\n", ret_lseek); perror("lseek()"); if(errno == ESPIPE) puts("Erreur ESPIPE : fd est associé à un tube (pipe), une socket, ou une file FIFO."); puts(""); // Tentative d'utiliser lseek sur le descripteur d'écriture ret_lseek = lseek(tube[1], 1, SEEK_CUR); printf("La fonction lseek sur le descripteur d'écriture retourne : %d\n", ret_lseek); perror("lseek()"); if(errno == ESPIPE) puts("Erreur ESPIPE : fd est associé à un tube (pipe), une socket, ou une file FIFO."); return 0; }
En l'exécutant j'ai bien un espipe sur lecture et écriture.
Comment faire pour éviter l'erreur ? Je dois faire un unlink ?
Merci pour votre aide !
Partager