[求助] 传递文件描述符的问题

chenbingjy   2016-9-18 15:54 楼主
我买了一本书《Linux网络编程》。
看到第11章高级套接字。有个例子,传递文件描述符。
其中,进程A根据用户输入的文件名打开一个文件,将文件描述符打包到消息结构中,然后发送给进程B.
进程A的代码如下:
1.jpg 2.jpg
main函数是带参数的,而且是带3个参数。
其中第二个参数是文件名,第三个参数是打开文件属性,比如只读。
第一个参数我搞不明白。
就是这句: if((n=send_fd(atoi(argv[1]),"",1,fd))<0)
                               return 0.
其中send_fd()是程序中定义的一个函数。那个argv[1]我不知道用什么代换。
我运行程序大概这样:
比如可执行文件为a,那么执行
./a  ? 1.txt 4
1.txt是文件名,4表示只读属性。?那个地方是第一个参数,我不知道应该填什么。请教高手,该怎么写?
谢谢!
为江山踏坏了乌骓马,为社稷拉断了宝雕弓。

回复评论 (10)

参数决定 发什么,当然也要决定 发给谁。
点赞  2016-9-18 16:06
引用: EETUX 发表于 2016-9-18 16:06
参数决定 发什么,当然也要决定 发给谁。

不明白。那第一个参数应该怎么写呢?
为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
点赞  2016-9-18 16:32
引用: chenbingjy 发表于 2016-9-18 16:32
不明白。那第一个参数应该怎么写呢?

不就是sendmsg的第一个参数
具体值要结合你所说的进程B来看
点赞  2016-9-18 23:12
引用: EETUX 发表于 2016-9-18 23:12
不就是sendmsg的第一个参数
具体值要结合你所说的进程B来看

谢谢!进程B获得进程A中发送过来的消息,并从中取得文件描述符。根据获得的文件描述符,
直接从文件中读取数据,并将数据在标准输出中打印出来。
源代码如下:
1.jpg 2.jpg 3.jpg
B进程要求带一个参数。
请多指教!谢谢
为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
点赞  2016-9-19 06:37
见72行execl(...) 的 3个参数
B的参数实际就是A的第二个参数
点赞  2016-9-19 09:19
引用: EETUX 发表于 2016-9-19 09:19
见72行execl(...) 的 3个参数
B的参数实际就是A的第二个参数

谢谢,我还是不明白。那应该怎么运行这两个程序呢?
我感觉应该先运行A吧。
运行应该大致怎么输入参数呢?你能不能举个例子。
我知道你是大神,你告诉我。谢谢,我太菜了。
为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
点赞  2016-9-19 10:39
我又想了一下,觉得应该这样。
把a文件编译成openfile
gcc -o openfile a.c
把b文件编译成b
gcc -o b b.c
运行:
./b /work/gcc/1.txt
1.txt有这么个txt文件。
可是还是不对。
高手支招啊
为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
点赞  2016-9-19 11:38
这个 还是自己分析下printf输出
点赞  2016-9-19 12:51
引用: EETUX 发表于 2016-9-19 12:51
这个 还是自己分析下printf输出

谢谢,搞好了
为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
点赞  2016-9-19 13:01
好东西谢谢分享!!
点赞  2016-9-19 21:52
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复