2010-09-07 31 views
1

Lors de l'exécution d'un script bash situé sur mon système de fichiers FUSE, un open() appel est fait avec ces drapeaux:ouvert() inconnu drapeau adopté par exec()

debug,cpfsfuse.c(62),cpfs_fuse_open: path "/make.sh", flags 0100040

Les drapeaux (0100040) doit correspondre à ceux qui sont passés dans le paramètre 2 de open(). Le drapeau inconnu provient d'un appel execve():

[email protected]:~/cpfs/dir$ strace -f ./make.sh 
execve("./make.sh", ["./make.sh"], [/* 37 vars */] 

Mon code reconnaît #define O_LARGEFILE 00100000, mais l'autre drapeau semble se poser que lorsque execve() est appelé.

Grepping pour le drapeau ne trouve pas:

[email protected]:~/cpfs$ grep -RP '\b00*40\b' /usr/include/ | less 

drapeaux terminaux La plupart du temps se trouvent. Quelqu'un peut-il nous éclairer sur la manière de retrouver l'origine et la signification de ce drapeau, ou sur la définition de sa définition?

Répondre

3

/usr/include/linux/fs.h:

/* File is opened for execution with sys_execve/sys_uselib */ 
#define FMODE_EXEC    ((fmode_t)32) 
+0

Wow, combien de temps cela vous amène à trouver? –

+0

Ceci est inséré dans 'fs/exec.c', ici: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=fs/ exec.c; h = 2d9455282744bce582e48e0ecec4f4a6d332a28c; hb = HEAD # l675 –

+1

Environ 15 minutes en utilisant la référence croisée du noyau Linux http://lxr.linux.no/ :-) – rkhayrov

0

Cela peut être une combinaison de drapeaux. (OUed).