Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
|
Разбираться в незнакомом коде лучше всего с дебаггером. 14.06.09 11:34 Число просмотров: 2079
Автор: amirul <Serge> Статус: The Elderman
|
> Я вот пытаюсь все найти реализацию функции pipe() в Linux и > понять, как она работает. Т.е. нужно узнать внутреннее > устройство этой функции. Пока нашел вот такой код: > http://git.kernel.org/?p=linux/kernel/git/stable/linux-2.6. > 30.y.git;a=blob;f=fs/pipe.c;h=13414ec45b8d5b42012d8c5fbd56d > 54df5a96749;hb=HEAD > > Но мне не совсем понятно, какая из этих функций и как > вызывается при вызове pipe(). Не подскажете, что там > происходит? А то я совсем запутался. > > Заранее благодарен :-). Разбираться в незнакомом коде лучше всего с дебаггером.
Из того что я вижу вызывается sys_pipe, которая вызывает sys_pipe2 без флагов, та в сВою очередь создает пайпы с помощью create_write_pipe/create_read_pipe, затем создает дескрипторы для этих файлов через install_fd, которые и аопирует в юзермод. А вообще я в линуксах не Копенгаген, так что могу ошибаться
|
<programming>
|
|
Разбираться в незнакомом коде лучше всего с дебаггером. 14.06.09 11:34
Автор: amirul <Serge> Статус: The Elderman
|
> Я вот пытаюсь все найти реализацию функции pipe() в Linux и > понять, как она работает. Т.е. нужно узнать внутреннее > устройство этой функции. Пока нашел вот такой код: > http://git.kernel.org/?p=linux/kernel/git/stable/linux-2.6. > 30.y.git;a=blob;f=fs/pipe.c;h=13414ec45b8d5b42012d8c5fbd56d > 54df5a96749;hb=HEAD > > Но мне не совсем понятно, какая из этих функций и как > вызывается при вызове pipe(). Не подскажете, что там > происходит? А то я совсем запутался. > > Заранее благодарен :-). Разбираться в незнакомом коде лучше всего с дебаггером.
Из того что я вижу вызывается sys_pipe, которая вызывает sys_pipe2 без флагов, та в сВою очередь создает пайпы с помощью create_write_pipe/create_read_pipe, затем создает дескрипторы для этих файлов через install_fd, которые и аопирует в юзермод. А вообще я в линуксах не Копенгаген, так что могу ошибаться
|
| |
Syscall_define? 14.06.09 15:05
Автор: n0xi0uzz <Черкасов Виктор> Статус: Member
|
> Разбираться в незнакомом коде лучше всего с дебаггером. > Из того что я вижу вызывается sys_pipe, которая вызывает > sys_pipe2 без флагов, та в сВою очередь создает пайпы с > помощью create_write_pipe/create_read_pipe, затем создает > дескрипторы для этих файлов через install_fd, которые и > аопирует в юзермод. А вообще я в линуксах не Копенгаген, > так что могу ошибаться
То есть
1081 SYSCALL_DEFINE1(pipe, int __user *, fildes)
1082 {
1083 return sys_pipe2(fildes, 0);
1084 }
---
— то sys_pipe(), а
1065 SYSCALL_DEFINE2(pipe2, int __user *, fildes, int, flags)
1066 {
1067 int fd[2];
1068 int error;
1069
1070 error = do_pipe_flags(fd, flags);
1071 if (!error) {
1072 if (copy_to_user(fildes, fd, sizeof(fd))) {
1073 sys_close(fd[0]);
1074 sys_close(fd[1]);
1075 error = -EFAULT;
1076 }
1077 }
1078 return error;
1079 }
---
это определение функции sys_pipe2()?
|
| | |
Да. А циферка после названия макроса - количество аргументов сискола 15.06.09 08:11
Автор: amirul <Serge> Статус: The Elderman
|
|
|
|